package org.eclipse.iota.xtext.parser.antlr.internal; 

import java.io.InputStream;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.xtext.parsetree.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.eclipse.xtext.conversion.ValueConverterException;
import org.eclipse.iota.xtext.services.IotaGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalIotaParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_BIG_INT", "RULE_BOOL", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'property'", "'('", "','", "')'", "'sequent'", "'=>'", "';'", "'|'", "'proof'", "'#'", "'exists'", "':'", "'&'", "'['", "']'", "'+'", "'*'", "'/'", "'^'", "'-'", "'='", "'!='", "'<'", "'>'"
    };
    public static final int RULE_ID=4;
    public static final int RULE_STRING=5;
    public static final int RULE_ANY_OTHER=12;
    public static final int RULE_BIG_INT=6;
    public static final int RULE_BOOL=7;
    public static final int RULE_INT=8;
    public static final int RULE_WS=11;
    public static final int RULE_SL_COMMENT=10;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=9;

        public InternalIotaParser(TokenStream input) {
            super(input);
        }
        

    public String[] getTokenNames() { return tokenNames; }
    public String getGrammarFileName() { return "../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g"; }



     	private IotaGrammarAccess grammarAccess;
     	
        public InternalIotaParser(TokenStream input, IAstFactory factory, IotaGrammarAccess grammarAccess) {
            this(input);
            this.factory = factory;
            registerRules(grammarAccess.getGrammar());
            this.grammarAccess = grammarAccess;
        }
        
        @Override
        protected InputStream getTokenFile() {
        	ClassLoader classLoader = getClass().getClassLoader();
        	return classLoader.getResourceAsStream("org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.tokens");
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "Module";	
       	}
       	
       	@Override
       	protected IotaGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start entryRuleModule
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:78:1: entryRuleModule returns [EObject current=null] : iv_ruleModule= ruleModule EOF ;
    public final EObject entryRuleModule() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleModule = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:79:2: (iv_ruleModule= ruleModule EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:80:2: iv_ruleModule= ruleModule EOF
            {
             currentNode = createCompositeNode(grammarAccess.getModuleRule(), currentNode); 
            pushFollow(FOLLOW_ruleModule_in_entryRuleModule75);
            iv_ruleModule=ruleModule();
            _fsp--;

             current =iv_ruleModule; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleModule85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleModule


    // $ANTLR start ruleModule
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:87:1: ruleModule returns [EObject current=null] : ( (lv_definitions_0_0= ruleDefinition ) )* ;
    public final EObject ruleModule() throws RecognitionException {
        EObject current = null;

        EObject lv_definitions_0_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:92:6: ( ( (lv_definitions_0_0= ruleDefinition ) )* )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:93:1: ( (lv_definitions_0_0= ruleDefinition ) )*
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:93:1: ( (lv_definitions_0_0= ruleDefinition ) )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==13||LA1_0==17) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:94:1: (lv_definitions_0_0= ruleDefinition )
            	    {
            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:94:1: (lv_definitions_0_0= ruleDefinition )
            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:95:3: lv_definitions_0_0= ruleDefinition
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getModuleAccess().getDefinitionsDefinitionParserRuleCall_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleDefinition_in_ruleModule130);
            	    lv_definitions_0_0=ruleDefinition();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getModuleRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"definitions",
            	    	        		lv_definitions_0_0, 
            	    	        		"Definition", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleModule


    // $ANTLR start entryRuleDefinition
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:125:1: entryRuleDefinition returns [EObject current=null] : iv_ruleDefinition= ruleDefinition EOF ;
    public final EObject entryRuleDefinition() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDefinition = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:126:2: (iv_ruleDefinition= ruleDefinition EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:127:2: iv_ruleDefinition= ruleDefinition EOF
            {
             currentNode = createCompositeNode(grammarAccess.getDefinitionRule(), currentNode); 
            pushFollow(FOLLOW_ruleDefinition_in_entryRuleDefinition166);
            iv_ruleDefinition=ruleDefinition();
            _fsp--;

             current =iv_ruleDefinition; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleDefinition176); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleDefinition


    // $ANTLR start ruleDefinition
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:134:1: ruleDefinition returns [EObject current=null] : ( ( ( 'property' () ( (lv_name_2_0= RULE_ID ) ) '(' ( ( (lv_parameters_4_0= ruleParameter ) ) ( ',' ( (lv_parameters_6_0= ruleParameter ) ) )* )? ')' ( (lv_body_8_0= ruleAlternation ) ) ) | ( 'sequent' () ( (lv_name_11_0= RULE_ID ) ) '(' ( ( (lv_parameters_13_0= ruleParameter ) ) ( ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )? ')' ( (lv_premise_17_0= ruleAlternation ) ) '=>' ( (lv_conclusion_19_0= ruleAlternation ) ) ( (lv_proof_20_0= ruleProof ) )? ) ) ';' ) ;
    public final EObject ruleDefinition() throws RecognitionException {
        EObject current = null;

        Token lv_name_2_0=null;
        Token lv_name_11_0=null;
        EObject lv_parameters_4_0 = null;

        EObject lv_parameters_6_0 = null;

        EObject lv_body_8_0 = null;

        EObject lv_parameters_13_0 = null;

        EObject lv_parameters_15_0 = null;

        EObject lv_premise_17_0 = null;

        EObject lv_conclusion_19_0 = null;

        EObject lv_proof_20_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:139:6: ( ( ( ( 'property' () ( (lv_name_2_0= RULE_ID ) ) '(' ( ( (lv_parameters_4_0= ruleParameter ) ) ( ',' ( (lv_parameters_6_0= ruleParameter ) ) )* )? ')' ( (lv_body_8_0= ruleAlternation ) ) ) | ( 'sequent' () ( (lv_name_11_0= RULE_ID ) ) '(' ( ( (lv_parameters_13_0= ruleParameter ) ) ( ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )? ')' ( (lv_premise_17_0= ruleAlternation ) ) '=>' ( (lv_conclusion_19_0= ruleAlternation ) ) ( (lv_proof_20_0= ruleProof ) )? ) ) ';' ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:140:1: ( ( ( 'property' () ( (lv_name_2_0= RULE_ID ) ) '(' ( ( (lv_parameters_4_0= ruleParameter ) ) ( ',' ( (lv_parameters_6_0= ruleParameter ) ) )* )? ')' ( (lv_body_8_0= ruleAlternation ) ) ) | ( 'sequent' () ( (lv_name_11_0= RULE_ID ) ) '(' ( ( (lv_parameters_13_0= ruleParameter ) ) ( ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )? ')' ( (lv_premise_17_0= ruleAlternation ) ) '=>' ( (lv_conclusion_19_0= ruleAlternation ) ) ( (lv_proof_20_0= ruleProof ) )? ) ) ';' )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:140:1: ( ( ( 'property' () ( (lv_name_2_0= RULE_ID ) ) '(' ( ( (lv_parameters_4_0= ruleParameter ) ) ( ',' ( (lv_parameters_6_0= ruleParameter ) ) )* )? ')' ( (lv_body_8_0= ruleAlternation ) ) ) | ( 'sequent' () ( (lv_name_11_0= RULE_ID ) ) '(' ( ( (lv_parameters_13_0= ruleParameter ) ) ( ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )? ')' ( (lv_premise_17_0= ruleAlternation ) ) '=>' ( (lv_conclusion_19_0= ruleAlternation ) ) ( (lv_proof_20_0= ruleProof ) )? ) ) ';' )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:140:2: ( ( 'property' () ( (lv_name_2_0= RULE_ID ) ) '(' ( ( (lv_parameters_4_0= ruleParameter ) ) ( ',' ( (lv_parameters_6_0= ruleParameter ) ) )* )? ')' ( (lv_body_8_0= ruleAlternation ) ) ) | ( 'sequent' () ( (lv_name_11_0= RULE_ID ) ) '(' ( ( (lv_parameters_13_0= ruleParameter ) ) ( ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )? ')' ( (lv_premise_17_0= ruleAlternation ) ) '=>' ( (lv_conclusion_19_0= ruleAlternation ) ) ( (lv_proof_20_0= ruleProof ) )? ) ) ';'
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:140:2: ( ( 'property' () ( (lv_name_2_0= RULE_ID ) ) '(' ( ( (lv_parameters_4_0= ruleParameter ) ) ( ',' ( (lv_parameters_6_0= ruleParameter ) ) )* )? ')' ( (lv_body_8_0= ruleAlternation ) ) ) | ( 'sequent' () ( (lv_name_11_0= RULE_ID ) ) '(' ( ( (lv_parameters_13_0= ruleParameter ) ) ( ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )? ')' ( (lv_premise_17_0= ruleAlternation ) ) '=>' ( (lv_conclusion_19_0= ruleAlternation ) ) ( (lv_proof_20_0= ruleProof ) )? ) )
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( (LA7_0==13) ) {
                alt7=1;
            }
            else if ( (LA7_0==17) ) {
                alt7=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("140:2: ( ( 'property' () ( (lv_name_2_0= RULE_ID ) ) '(' ( ( (lv_parameters_4_0= ruleParameter ) ) ( ',' ( (lv_parameters_6_0= ruleParameter ) ) )* )? ')' ( (lv_body_8_0= ruleAlternation ) ) ) | ( 'sequent' () ( (lv_name_11_0= RULE_ID ) ) '(' ( ( (lv_parameters_13_0= ruleParameter ) ) ( ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )? ')' ( (lv_premise_17_0= ruleAlternation ) ) '=>' ( (lv_conclusion_19_0= ruleAlternation ) ) ( (lv_proof_20_0= ruleProof ) )? ) )", 7, 0, input);

                throw nvae;
            }
            switch (alt7) {
                case 1 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:140:3: ( 'property' () ( (lv_name_2_0= RULE_ID ) ) '(' ( ( (lv_parameters_4_0= ruleParameter ) ) ( ',' ( (lv_parameters_6_0= ruleParameter ) ) )* )? ')' ( (lv_body_8_0= ruleAlternation ) ) )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:140:3: ( 'property' () ( (lv_name_2_0= RULE_ID ) ) '(' ( ( (lv_parameters_4_0= ruleParameter ) ) ( ',' ( (lv_parameters_6_0= ruleParameter ) ) )* )? ')' ( (lv_body_8_0= ruleAlternation ) ) )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:140:5: 'property' () ( (lv_name_2_0= RULE_ID ) ) '(' ( ( (lv_parameters_4_0= ruleParameter ) ) ( ',' ( (lv_parameters_6_0= ruleParameter ) ) )* )? ')' ( (lv_body_8_0= ruleAlternation ) )
                    {
                    match(input,13,FOLLOW_13_in_ruleDefinition213); 

                            createLeafNode(grammarAccess.getDefinitionAccess().getPropertyKeyword_0_0_0(), null); 
                        
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:144:1: ()
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:145:5: 
                    {
                     
                            temp=factory.create(grammarAccess.getDefinitionAccess().getPropertyAction_0_0_1().getType().getClassifier());
                            current = temp; 
                            temp = null;
                            CompositeNode newNode = createCompositeNode(grammarAccess.getDefinitionAccess().getPropertyAction_0_0_1(), currentNode.getParent());
                        newNode.getChildren().add(currentNode);
                        moveLookaheadInfo(currentNode, newNode);
                        currentNode = newNode; 
                            associateNodeWithAstElement(currentNode, current); 
                        

                    }

                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:155:2: ( (lv_name_2_0= RULE_ID ) )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:156:1: (lv_name_2_0= RULE_ID )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:156:1: (lv_name_2_0= RULE_ID )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:157:3: lv_name_2_0= RULE_ID
                    {
                    lv_name_2_0=(Token)input.LT(1);
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleDefinition239); 

                    			createLeafNode(grammarAccess.getDefinitionAccess().getNameIDTerminalRuleCall_0_0_2_0(), "name"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getDefinitionRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"name",
                    	        		lv_name_2_0, 
                    	        		"ID", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }

                    match(input,14,FOLLOW_14_in_ruleDefinition254); 

                            createLeafNode(grammarAccess.getDefinitionAccess().getLeftParenthesisKeyword_0_0_3(), null); 
                        
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:183:1: ( ( (lv_parameters_4_0= ruleParameter ) ) ( ',' ( (lv_parameters_6_0= ruleParameter ) ) )* )?
                    int alt3=2;
                    int LA3_0 = input.LA(1);

                    if ( (LA3_0==RULE_ID) ) {
                        alt3=1;
                    }
                    switch (alt3) {
                        case 1 :
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:183:2: ( (lv_parameters_4_0= ruleParameter ) ) ( ',' ( (lv_parameters_6_0= ruleParameter ) ) )*
                            {
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:183:2: ( (lv_parameters_4_0= ruleParameter ) )
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:184:1: (lv_parameters_4_0= ruleParameter )
                            {
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:184:1: (lv_parameters_4_0= ruleParameter )
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:185:3: lv_parameters_4_0= ruleParameter
                            {
                             
                            	        currentNode=createCompositeNode(grammarAccess.getDefinitionAccess().getParametersParameterParserRuleCall_0_0_4_0_0(), currentNode); 
                            	    
                            pushFollow(FOLLOW_ruleParameter_in_ruleDefinition276);
                            lv_parameters_4_0=ruleParameter();
                            _fsp--;


                            	        if (current==null) {
                            	            current = factory.create(grammarAccess.getDefinitionRule().getType().getClassifier());
                            	            associateNodeWithAstElement(currentNode.getParent(), current);
                            	        }
                            	        try {
                            	       		add(
                            	       			current, 
                            	       			"parameters",
                            	        		lv_parameters_4_0, 
                            	        		"Parameter", 
                            	        		currentNode);
                            	        } catch (ValueConverterException vce) {
                            				handleValueConverterException(vce);
                            	        }
                            	        currentNode = currentNode.getParent();
                            	    

                            }


                            }

                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:207:2: ( ',' ( (lv_parameters_6_0= ruleParameter ) ) )*
                            loop2:
                            do {
                                int alt2=2;
                                int LA2_0 = input.LA(1);

                                if ( (LA2_0==15) ) {
                                    alt2=1;
                                }


                                switch (alt2) {
                            	case 1 :
                            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:207:4: ',' ( (lv_parameters_6_0= ruleParameter ) )
                            	    {
                            	    match(input,15,FOLLOW_15_in_ruleDefinition287); 

                            	            createLeafNode(grammarAccess.getDefinitionAccess().getCommaKeyword_0_0_4_1_0(), null); 
                            	        
                            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:211:1: ( (lv_parameters_6_0= ruleParameter ) )
                            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:212:1: (lv_parameters_6_0= ruleParameter )
                            	    {
                            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:212:1: (lv_parameters_6_0= ruleParameter )
                            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:213:3: lv_parameters_6_0= ruleParameter
                            	    {
                            	     
                            	    	        currentNode=createCompositeNode(grammarAccess.getDefinitionAccess().getParametersParameterParserRuleCall_0_0_4_1_1_0(), currentNode); 
                            	    	    
                            	    pushFollow(FOLLOW_ruleParameter_in_ruleDefinition308);
                            	    lv_parameters_6_0=ruleParameter();
                            	    _fsp--;


                            	    	        if (current==null) {
                            	    	            current = factory.create(grammarAccess.getDefinitionRule().getType().getClassifier());
                            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                            	    	        }
                            	    	        try {
                            	    	       		add(
                            	    	       			current, 
                            	    	       			"parameters",
                            	    	        		lv_parameters_6_0, 
                            	    	        		"Parameter", 
                            	    	        		currentNode);
                            	    	        } catch (ValueConverterException vce) {
                            	    				handleValueConverterException(vce);
                            	    	        }
                            	    	        currentNode = currentNode.getParent();
                            	    	    

                            	    }


                            	    }


                            	    }
                            	    break;

                            	default :
                            	    break loop2;
                                }
                            } while (true);


                            }
                            break;

                    }

                    match(input,16,FOLLOW_16_in_ruleDefinition322); 

                            createLeafNode(grammarAccess.getDefinitionAccess().getRightParenthesisKeyword_0_0_5(), null); 
                        
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:239:1: ( (lv_body_8_0= ruleAlternation ) )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:240:1: (lv_body_8_0= ruleAlternation )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:240:1: (lv_body_8_0= ruleAlternation )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:241:3: lv_body_8_0= ruleAlternation
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getDefinitionAccess().getBodyAlternationParserRuleCall_0_0_6_0(), currentNode); 
                    	    
                    pushFollow(FOLLOW_ruleAlternation_in_ruleDefinition343);
                    lv_body_8_0=ruleAlternation();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getDefinitionRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"body",
                    	        		lv_body_8_0, 
                    	        		"Alternation", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:264:6: ( 'sequent' () ( (lv_name_11_0= RULE_ID ) ) '(' ( ( (lv_parameters_13_0= ruleParameter ) ) ( ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )? ')' ( (lv_premise_17_0= ruleAlternation ) ) '=>' ( (lv_conclusion_19_0= ruleAlternation ) ) ( (lv_proof_20_0= ruleProof ) )? )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:264:6: ( 'sequent' () ( (lv_name_11_0= RULE_ID ) ) '(' ( ( (lv_parameters_13_0= ruleParameter ) ) ( ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )? ')' ( (lv_premise_17_0= ruleAlternation ) ) '=>' ( (lv_conclusion_19_0= ruleAlternation ) ) ( (lv_proof_20_0= ruleProof ) )? )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:264:8: 'sequent' () ( (lv_name_11_0= RULE_ID ) ) '(' ( ( (lv_parameters_13_0= ruleParameter ) ) ( ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )? ')' ( (lv_premise_17_0= ruleAlternation ) ) '=>' ( (lv_conclusion_19_0= ruleAlternation ) ) ( (lv_proof_20_0= ruleProof ) )?
                    {
                    match(input,17,FOLLOW_17_in_ruleDefinition361); 

                            createLeafNode(grammarAccess.getDefinitionAccess().getSequentKeyword_0_1_0(), null); 
                        
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:268:1: ()
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:269:5: 
                    {
                     
                            temp=factory.create(grammarAccess.getDefinitionAccess().getSequentAction_0_1_1().getType().getClassifier());
                            current = temp; 
                            temp = null;
                            CompositeNode newNode = createCompositeNode(grammarAccess.getDefinitionAccess().getSequentAction_0_1_1(), currentNode.getParent());
                        newNode.getChildren().add(currentNode);
                        moveLookaheadInfo(currentNode, newNode);
                        currentNode = newNode; 
                            associateNodeWithAstElement(currentNode, current); 
                        

                    }

                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:279:2: ( (lv_name_11_0= RULE_ID ) )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:280:1: (lv_name_11_0= RULE_ID )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:280:1: (lv_name_11_0= RULE_ID )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:281:3: lv_name_11_0= RULE_ID
                    {
                    lv_name_11_0=(Token)input.LT(1);
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleDefinition387); 

                    			createLeafNode(grammarAccess.getDefinitionAccess().getNameIDTerminalRuleCall_0_1_2_0(), "name"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getDefinitionRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"name",
                    	        		lv_name_11_0, 
                    	        		"ID", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }

                    match(input,14,FOLLOW_14_in_ruleDefinition402); 

                            createLeafNode(grammarAccess.getDefinitionAccess().getLeftParenthesisKeyword_0_1_3(), null); 
                        
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:307:1: ( ( (lv_parameters_13_0= ruleParameter ) ) ( ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )?
                    int alt5=2;
                    int LA5_0 = input.LA(1);

                    if ( (LA5_0==RULE_ID) ) {
                        alt5=1;
                    }
                    switch (alt5) {
                        case 1 :
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:307:2: ( (lv_parameters_13_0= ruleParameter ) ) ( ',' ( (lv_parameters_15_0= ruleParameter ) ) )*
                            {
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:307:2: ( (lv_parameters_13_0= ruleParameter ) )
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:308:1: (lv_parameters_13_0= ruleParameter )
                            {
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:308:1: (lv_parameters_13_0= ruleParameter )
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:309:3: lv_parameters_13_0= ruleParameter
                            {
                             
                            	        currentNode=createCompositeNode(grammarAccess.getDefinitionAccess().getParametersParameterParserRuleCall_0_1_4_0_0(), currentNode); 
                            	    
                            pushFollow(FOLLOW_ruleParameter_in_ruleDefinition424);
                            lv_parameters_13_0=ruleParameter();
                            _fsp--;


                            	        if (current==null) {
                            	            current = factory.create(grammarAccess.getDefinitionRule().getType().getClassifier());
                            	            associateNodeWithAstElement(currentNode.getParent(), current);
                            	        }
                            	        try {
                            	       		add(
                            	       			current, 
                            	       			"parameters",
                            	        		lv_parameters_13_0, 
                            	        		"Parameter", 
                            	        		currentNode);
                            	        } catch (ValueConverterException vce) {
                            				handleValueConverterException(vce);
                            	        }
                            	        currentNode = currentNode.getParent();
                            	    

                            }


                            }

                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:331:2: ( ',' ( (lv_parameters_15_0= ruleParameter ) ) )*
                            loop4:
                            do {
                                int alt4=2;
                                int LA4_0 = input.LA(1);

                                if ( (LA4_0==15) ) {
                                    alt4=1;
                                }


                                switch (alt4) {
                            	case 1 :
                            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:331:4: ',' ( (lv_parameters_15_0= ruleParameter ) )
                            	    {
                            	    match(input,15,FOLLOW_15_in_ruleDefinition435); 

                            	            createLeafNode(grammarAccess.getDefinitionAccess().getCommaKeyword_0_1_4_1_0(), null); 
                            	        
                            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:335:1: ( (lv_parameters_15_0= ruleParameter ) )
                            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:336:1: (lv_parameters_15_0= ruleParameter )
                            	    {
                            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:336:1: (lv_parameters_15_0= ruleParameter )
                            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:337:3: lv_parameters_15_0= ruleParameter
                            	    {
                            	     
                            	    	        currentNode=createCompositeNode(grammarAccess.getDefinitionAccess().getParametersParameterParserRuleCall_0_1_4_1_1_0(), currentNode); 
                            	    	    
                            	    pushFollow(FOLLOW_ruleParameter_in_ruleDefinition456);
                            	    lv_parameters_15_0=ruleParameter();
                            	    _fsp--;


                            	    	        if (current==null) {
                            	    	            current = factory.create(grammarAccess.getDefinitionRule().getType().getClassifier());
                            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                            	    	        }
                            	    	        try {
                            	    	       		add(
                            	    	       			current, 
                            	    	       			"parameters",
                            	    	        		lv_parameters_15_0, 
                            	    	        		"Parameter", 
                            	    	        		currentNode);
                            	    	        } catch (ValueConverterException vce) {
                            	    				handleValueConverterException(vce);
                            	    	        }
                            	    	        currentNode = currentNode.getParent();
                            	    	    

                            	    }


                            	    }


                            	    }
                            	    break;

                            	default :
                            	    break loop4;
                                }
                            } while (true);


                            }
                            break;

                    }

                    match(input,16,FOLLOW_16_in_ruleDefinition470); 

                            createLeafNode(grammarAccess.getDefinitionAccess().getRightParenthesisKeyword_0_1_5(), null); 
                        
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:363:1: ( (lv_premise_17_0= ruleAlternation ) )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:364:1: (lv_premise_17_0= ruleAlternation )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:364:1: (lv_premise_17_0= ruleAlternation )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:365:3: lv_premise_17_0= ruleAlternation
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getDefinitionAccess().getPremiseAlternationParserRuleCall_0_1_6_0(), currentNode); 
                    	    
                    pushFollow(FOLLOW_ruleAlternation_in_ruleDefinition491);
                    lv_premise_17_0=ruleAlternation();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getDefinitionRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"premise",
                    	        		lv_premise_17_0, 
                    	        		"Alternation", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }

                    match(input,18,FOLLOW_18_in_ruleDefinition501); 

                            createLeafNode(grammarAccess.getDefinitionAccess().getEqualsSignGreaterThanSignKeyword_0_1_7(), null); 
                        
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:391:1: ( (lv_conclusion_19_0= ruleAlternation ) )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:392:1: (lv_conclusion_19_0= ruleAlternation )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:392:1: (lv_conclusion_19_0= ruleAlternation )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:393:3: lv_conclusion_19_0= ruleAlternation
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getDefinitionAccess().getConclusionAlternationParserRuleCall_0_1_8_0(), currentNode); 
                    	    
                    pushFollow(FOLLOW_ruleAlternation_in_ruleDefinition522);
                    lv_conclusion_19_0=ruleAlternation();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getDefinitionRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"conclusion",
                    	        		lv_conclusion_19_0, 
                    	        		"Alternation", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }

                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:415:2: ( (lv_proof_20_0= ruleProof ) )?
                    int alt6=2;
                    int LA6_0 = input.LA(1);

                    if ( (LA6_0==21) ) {
                        alt6=1;
                    }
                    switch (alt6) {
                        case 1 :
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:416:1: (lv_proof_20_0= ruleProof )
                            {
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:416:1: (lv_proof_20_0= ruleProof )
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:417:3: lv_proof_20_0= ruleProof
                            {
                             
                            	        currentNode=createCompositeNode(grammarAccess.getDefinitionAccess().getProofProofParserRuleCall_0_1_9_0(), currentNode); 
                            	    
                            pushFollow(FOLLOW_ruleProof_in_ruleDefinition543);
                            lv_proof_20_0=ruleProof();
                            _fsp--;


                            	        if (current==null) {
                            	            current = factory.create(grammarAccess.getDefinitionRule().getType().getClassifier());
                            	            associateNodeWithAstElement(currentNode.getParent(), current);
                            	        }
                            	        try {
                            	       		set(
                            	       			current, 
                            	       			"proof",
                            	        		lv_proof_20_0, 
                            	        		"Proof", 
                            	        		currentNode);
                            	        } catch (ValueConverterException vce) {
                            				handleValueConverterException(vce);
                            	        }
                            	        currentNode = currentNode.getParent();
                            	    

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;

            }

            match(input,19,FOLLOW_19_in_ruleDefinition556); 

                    createLeafNode(grammarAccess.getDefinitionAccess().getSemicolonKeyword_1(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleDefinition


    // $ANTLR start entryRuleAlternation
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:451:1: entryRuleAlternation returns [EObject current=null] : iv_ruleAlternation= ruleAlternation EOF ;
    public final EObject entryRuleAlternation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAlternation = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:452:2: (iv_ruleAlternation= ruleAlternation EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:453:2: iv_ruleAlternation= ruleAlternation EOF
            {
             currentNode = createCompositeNode(grammarAccess.getAlternationRule(), currentNode); 
            pushFollow(FOLLOW_ruleAlternation_in_entryRuleAlternation592);
            iv_ruleAlternation=ruleAlternation();
            _fsp--;

             current =iv_ruleAlternation; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAlternation602); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleAlternation


    // $ANTLR start ruleAlternation
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:460:1: ruleAlternation returns [EObject current=null] : ( ( (lv_clauses_0_0= ruleClause ) ) ( '|' ( (lv_clauses_2_0= ruleClause ) ) )* ) ;
    public final EObject ruleAlternation() throws RecognitionException {
        EObject current = null;

        EObject lv_clauses_0_0 = null;

        EObject lv_clauses_2_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:465:6: ( ( ( (lv_clauses_0_0= ruleClause ) ) ( '|' ( (lv_clauses_2_0= ruleClause ) ) )* ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:466:1: ( ( (lv_clauses_0_0= ruleClause ) ) ( '|' ( (lv_clauses_2_0= ruleClause ) ) )* )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:466:1: ( ( (lv_clauses_0_0= ruleClause ) ) ( '|' ( (lv_clauses_2_0= ruleClause ) ) )* )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:466:2: ( (lv_clauses_0_0= ruleClause ) ) ( '|' ( (lv_clauses_2_0= ruleClause ) ) )*
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:466:2: ( (lv_clauses_0_0= ruleClause ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:467:1: (lv_clauses_0_0= ruleClause )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:467:1: (lv_clauses_0_0= ruleClause )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:468:3: lv_clauses_0_0= ruleClause
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getAlternationAccess().getClausesClauseParserRuleCall_0_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleClause_in_ruleAlternation648);
            lv_clauses_0_0=ruleClause();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getAlternationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		add(
            	       			current, 
            	       			"clauses",
            	        		lv_clauses_0_0, 
            	        		"Clause", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:490:2: ( '|' ( (lv_clauses_2_0= ruleClause ) ) )*
            loop8:
            do {
                int alt8=2;
                int LA8_0 = input.LA(1);

                if ( (LA8_0==20) ) {
                    alt8=1;
                }


                switch (alt8) {
            	case 1 :
            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:490:4: '|' ( (lv_clauses_2_0= ruleClause ) )
            	    {
            	    match(input,20,FOLLOW_20_in_ruleAlternation659); 

            	            createLeafNode(grammarAccess.getAlternationAccess().getVerticalLineKeyword_1_0(), null); 
            	        
            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:494:1: ( (lv_clauses_2_0= ruleClause ) )
            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:495:1: (lv_clauses_2_0= ruleClause )
            	    {
            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:495:1: (lv_clauses_2_0= ruleClause )
            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:496:3: lv_clauses_2_0= ruleClause
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getAlternationAccess().getClausesClauseParserRuleCall_1_1_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleClause_in_ruleAlternation680);
            	    lv_clauses_2_0=ruleClause();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getAlternationRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"clauses",
            	    	        		lv_clauses_2_0, 
            	    	        		"Clause", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop8;
                }
            } while (true);


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleAlternation


    // $ANTLR start entryRuleParameter
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:526:1: entryRuleParameter returns [EObject current=null] : iv_ruleParameter= ruleParameter EOF ;
    public final EObject entryRuleParameter() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleParameter = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:527:2: (iv_ruleParameter= ruleParameter EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:528:2: iv_ruleParameter= ruleParameter EOF
            {
             currentNode = createCompositeNode(grammarAccess.getParameterRule(), currentNode); 
            pushFollow(FOLLOW_ruleParameter_in_entryRuleParameter718);
            iv_ruleParameter=ruleParameter();
            _fsp--;

             current =iv_ruleParameter; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleParameter728); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleParameter


    // $ANTLR start ruleParameter
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:535:1: ruleParameter returns [EObject current=null] : ( (lv_name_0_0= RULE_ID ) ) ;
    public final EObject ruleParameter() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:540:6: ( ( (lv_name_0_0= RULE_ID ) ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:541:1: ( (lv_name_0_0= RULE_ID ) )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:541:1: ( (lv_name_0_0= RULE_ID ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:542:1: (lv_name_0_0= RULE_ID )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:542:1: (lv_name_0_0= RULE_ID )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:543:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleParameter769); 

            			createLeafNode(grammarAccess.getParameterAccess().getNameIDTerminalRuleCall_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getParameterRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_0_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleParameter


    // $ANTLR start entryRuleProof
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:573:1: entryRuleProof returns [EObject current=null] : iv_ruleProof= ruleProof EOF ;
    public final EObject entryRuleProof() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleProof = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:574:2: (iv_ruleProof= ruleProof EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:575:2: iv_ruleProof= ruleProof EOF
            {
             currentNode = createCompositeNode(grammarAccess.getProofRule(), currentNode); 
            pushFollow(FOLLOW_ruleProof_in_entryRuleProof809);
            iv_ruleProof=ruleProof();
            _fsp--;

             current =iv_ruleProof; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleProof819); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleProof


    // $ANTLR start ruleProof
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:582:1: ruleProof returns [EObject current=null] : ( 'proof' () ( (lv_steps_2_0= ruleStep ) )* ) ;
    public final EObject ruleProof() throws RecognitionException {
        EObject current = null;

        EObject lv_steps_2_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:587:6: ( ( 'proof' () ( (lv_steps_2_0= ruleStep ) )* ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:588:1: ( 'proof' () ( (lv_steps_2_0= ruleStep ) )* )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:588:1: ( 'proof' () ( (lv_steps_2_0= ruleStep ) )* )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:588:3: 'proof' () ( (lv_steps_2_0= ruleStep ) )*
            {
            match(input,21,FOLLOW_21_in_ruleProof854); 

                    createLeafNode(grammarAccess.getProofAccess().getProofKeyword_0(), null); 
                
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:592:1: ()
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:593:5: 
            {
             
                    temp=factory.create(grammarAccess.getProofAccess().getProofAction_1().getType().getClassifier());
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getProofAccess().getProofAction_1(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }

            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:603:2: ( (lv_steps_2_0= ruleStep ) )*
            loop9:
            do {
                int alt9=2;
                int LA9_0 = input.LA(1);

                if ( (LA9_0==RULE_ID) ) {
                    alt9=1;
                }


                switch (alt9) {
            	case 1 :
            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:604:1: (lv_steps_2_0= ruleStep )
            	    {
            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:604:1: (lv_steps_2_0= ruleStep )
            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:605:3: lv_steps_2_0= ruleStep
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getProofAccess().getStepsStepParserRuleCall_2_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleStep_in_ruleProof884);
            	    lv_steps_2_0=ruleStep();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getProofRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"steps",
            	    	        		lv_steps_2_0, 
            	    	        		"Step", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop9;
                }
            } while (true);


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleProof


    // $ANTLR start entryRuleStep
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:635:1: entryRuleStep returns [EObject current=null] : iv_ruleStep= ruleStep EOF ;
    public final EObject entryRuleStep() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleStep = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:636:2: (iv_ruleStep= ruleStep EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:637:2: iv_ruleStep= ruleStep EOF
            {
             currentNode = createCompositeNode(grammarAccess.getStepRule(), currentNode); 
            pushFollow(FOLLOW_ruleStep_in_entryRuleStep921);
            iv_ruleStep=ruleStep();
            _fsp--;

             current =iv_ruleStep; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleStep931); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleStep


    // $ANTLR start ruleStep
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:644:1: ruleStep returns [EObject current=null] : ( ( (lv_rule_0_0= ruleRule ) ) ( ( (lv_target_1_0= RULE_STRING ) ) ( '#' ( (lv_match_3_0= RULE_BIG_INT ) ) )? )? ) ;
    public final EObject ruleStep() throws RecognitionException {
        EObject current = null;

        Token lv_target_1_0=null;
        Token lv_match_3_0=null;
        AntlrDatatypeRuleToken lv_rule_0_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:649:6: ( ( ( (lv_rule_0_0= ruleRule ) ) ( ( (lv_target_1_0= RULE_STRING ) ) ( '#' ( (lv_match_3_0= RULE_BIG_INT ) ) )? )? ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:650:1: ( ( (lv_rule_0_0= ruleRule ) ) ( ( (lv_target_1_0= RULE_STRING ) ) ( '#' ( (lv_match_3_0= RULE_BIG_INT ) ) )? )? )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:650:1: ( ( (lv_rule_0_0= ruleRule ) ) ( ( (lv_target_1_0= RULE_STRING ) ) ( '#' ( (lv_match_3_0= RULE_BIG_INT ) ) )? )? )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:650:2: ( (lv_rule_0_0= ruleRule ) ) ( ( (lv_target_1_0= RULE_STRING ) ) ( '#' ( (lv_match_3_0= RULE_BIG_INT ) ) )? )?
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:650:2: ( (lv_rule_0_0= ruleRule ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:651:1: (lv_rule_0_0= ruleRule )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:651:1: (lv_rule_0_0= ruleRule )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:652:3: lv_rule_0_0= ruleRule
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getStepAccess().getRuleRuleParserRuleCall_0_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleRule_in_ruleStep977);
            lv_rule_0_0=ruleRule();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getStepRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"rule",
            	        		lv_rule_0_0, 
            	        		"Rule", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:674:2: ( ( (lv_target_1_0= RULE_STRING ) ) ( '#' ( (lv_match_3_0= RULE_BIG_INT ) ) )? )?
            int alt11=2;
            int LA11_0 = input.LA(1);

            if ( (LA11_0==RULE_STRING) ) {
                alt11=1;
            }
            switch (alt11) {
                case 1 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:674:3: ( (lv_target_1_0= RULE_STRING ) ) ( '#' ( (lv_match_3_0= RULE_BIG_INT ) ) )?
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:674:3: ( (lv_target_1_0= RULE_STRING ) )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:675:1: (lv_target_1_0= RULE_STRING )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:675:1: (lv_target_1_0= RULE_STRING )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:676:3: lv_target_1_0= RULE_STRING
                    {
                    lv_target_1_0=(Token)input.LT(1);
                    match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleStep995); 

                    			createLeafNode(grammarAccess.getStepAccess().getTargetSTRINGTerminalRuleCall_1_0_0(), "target"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getStepRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"target",
                    	        		lv_target_1_0, 
                    	        		"STRING", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }

                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:698:2: ( '#' ( (lv_match_3_0= RULE_BIG_INT ) ) )?
                    int alt10=2;
                    int LA10_0 = input.LA(1);

                    if ( (LA10_0==22) ) {
                        alt10=1;
                    }
                    switch (alt10) {
                        case 1 :
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:698:4: '#' ( (lv_match_3_0= RULE_BIG_INT ) )
                            {
                            match(input,22,FOLLOW_22_in_ruleStep1011); 

                                    createLeafNode(grammarAccess.getStepAccess().getNumberSignKeyword_1_1_0(), null); 
                                
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:702:1: ( (lv_match_3_0= RULE_BIG_INT ) )
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:703:1: (lv_match_3_0= RULE_BIG_INT )
                            {
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:703:1: (lv_match_3_0= RULE_BIG_INT )
                            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:704:3: lv_match_3_0= RULE_BIG_INT
                            {
                            lv_match_3_0=(Token)input.LT(1);
                            match(input,RULE_BIG_INT,FOLLOW_RULE_BIG_INT_in_ruleStep1028); 

                            			createLeafNode(grammarAccess.getStepAccess().getMatchBIG_INTTerminalRuleCall_1_1_1_0(), "match"); 
                            		

                            	        if (current==null) {
                            	            current = factory.create(grammarAccess.getStepRule().getType().getClassifier());
                            	            associateNodeWithAstElement(currentNode, current);
                            	        }
                            	        try {
                            	       		set(
                            	       			current, 
                            	       			"match",
                            	        		lv_match_3_0, 
                            	        		"BIG_INT", 
                            	        		lastConsumedNode);
                            	        } catch (ValueConverterException vce) {
                            				handleValueConverterException(vce);
                            	        }
                            	    

                            }


                            }


                            }
                            break;

                    }


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleStep


    // $ANTLR start entryRuleRule
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:734:1: entryRuleRule returns [String current=null] : iv_ruleRule= ruleRule EOF ;
    public final String entryRuleRule() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleRule = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:735:2: (iv_ruleRule= ruleRule EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:736:2: iv_ruleRule= ruleRule EOF
            {
             currentNode = createCompositeNode(grammarAccess.getRuleRule(), currentNode); 
            pushFollow(FOLLOW_ruleRule_in_entryRuleRule1074);
            iv_ruleRule=ruleRule();
            _fsp--;

             current =iv_ruleRule.getText(); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleRule1085); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleRule


    // $ANTLR start ruleRule
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:743:1: ruleRule returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_ID_0= RULE_ID ;
    public final AntlrDatatypeRuleToken ruleRule() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;

         setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:748:6: (this_ID_0= RULE_ID )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:749:5: this_ID_0= RULE_ID
            {
            this_ID_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRule1124); 

            		current.merge(this_ID_0);
                
             
                createLeafNode(grammarAccess.getRuleAccess().getIDTerminalRuleCall(), null); 
                

            }

             resetLookahead(); 
            	    lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleRule


    // $ANTLR start entryRuleClause
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:764:1: entryRuleClause returns [EObject current=null] : iv_ruleClause= ruleClause EOF ;
    public final EObject entryRuleClause() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleClause = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:765:2: (iv_ruleClause= ruleClause EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:766:2: iv_ruleClause= ruleClause EOF
            {
             currentNode = createCompositeNode(grammarAccess.getClauseRule(), currentNode); 
            pushFollow(FOLLOW_ruleClause_in_entryRuleClause1168);
            iv_ruleClause=ruleClause();
            _fsp--;

             current =iv_ruleClause; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleClause1178); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleClause


    // $ANTLR start ruleClause
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:773:1: ruleClause returns [EObject current=null] : ( ( 'exists' ( (lv_existentials_1_0= ruleExistential ) ) ( ',' ( (lv_existentials_3_0= ruleExistential ) ) )* ':' )? ( (lv_constraints_5_0= ruleConstraint ) ) ( '&' ( (lv_constraints_7_0= ruleConstraint ) ) )* ) ;
    public final EObject ruleClause() throws RecognitionException {
        EObject current = null;

        EObject lv_existentials_1_0 = null;

        EObject lv_existentials_3_0 = null;

        EObject lv_constraints_5_0 = null;

        EObject lv_constraints_7_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:778:6: ( ( ( 'exists' ( (lv_existentials_1_0= ruleExistential ) ) ( ',' ( (lv_existentials_3_0= ruleExistential ) ) )* ':' )? ( (lv_constraints_5_0= ruleConstraint ) ) ( '&' ( (lv_constraints_7_0= ruleConstraint ) ) )* ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:779:1: ( ( 'exists' ( (lv_existentials_1_0= ruleExistential ) ) ( ',' ( (lv_existentials_3_0= ruleExistential ) ) )* ':' )? ( (lv_constraints_5_0= ruleConstraint ) ) ( '&' ( (lv_constraints_7_0= ruleConstraint ) ) )* )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:779:1: ( ( 'exists' ( (lv_existentials_1_0= ruleExistential ) ) ( ',' ( (lv_existentials_3_0= ruleExistential ) ) )* ':' )? ( (lv_constraints_5_0= ruleConstraint ) ) ( '&' ( (lv_constraints_7_0= ruleConstraint ) ) )* )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:779:2: ( 'exists' ( (lv_existentials_1_0= ruleExistential ) ) ( ',' ( (lv_existentials_3_0= ruleExistential ) ) )* ':' )? ( (lv_constraints_5_0= ruleConstraint ) ) ( '&' ( (lv_constraints_7_0= ruleConstraint ) ) )*
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:779:2: ( 'exists' ( (lv_existentials_1_0= ruleExistential ) ) ( ',' ( (lv_existentials_3_0= ruleExistential ) ) )* ':' )?
            int alt13=2;
            int LA13_0 = input.LA(1);

            if ( (LA13_0==23) ) {
                alt13=1;
            }
            switch (alt13) {
                case 1 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:779:4: 'exists' ( (lv_existentials_1_0= ruleExistential ) ) ( ',' ( (lv_existentials_3_0= ruleExistential ) ) )* ':'
                    {
                    match(input,23,FOLLOW_23_in_ruleClause1214); 

                            createLeafNode(grammarAccess.getClauseAccess().getExistsKeyword_0_0(), null); 
                        
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:783:1: ( (lv_existentials_1_0= ruleExistential ) )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:784:1: (lv_existentials_1_0= ruleExistential )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:784:1: (lv_existentials_1_0= ruleExistential )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:785:3: lv_existentials_1_0= ruleExistential
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getClauseAccess().getExistentialsExistentialParserRuleCall_0_1_0(), currentNode); 
                    	    
                    pushFollow(FOLLOW_ruleExistential_in_ruleClause1235);
                    lv_existentials_1_0=ruleExistential();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getClauseRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		add(
                    	       			current, 
                    	       			"existentials",
                    	        		lv_existentials_1_0, 
                    	        		"Existential", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }

                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:807:2: ( ',' ( (lv_existentials_3_0= ruleExistential ) ) )*
                    loop12:
                    do {
                        int alt12=2;
                        int LA12_0 = input.LA(1);

                        if ( (LA12_0==15) ) {
                            alt12=1;
                        }


                        switch (alt12) {
                    	case 1 :
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:807:4: ',' ( (lv_existentials_3_0= ruleExistential ) )
                    	    {
                    	    match(input,15,FOLLOW_15_in_ruleClause1246); 

                    	            createLeafNode(grammarAccess.getClauseAccess().getCommaKeyword_0_2_0(), null); 
                    	        
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:811:1: ( (lv_existentials_3_0= ruleExistential ) )
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:812:1: (lv_existentials_3_0= ruleExistential )
                    	    {
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:812:1: (lv_existentials_3_0= ruleExistential )
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:813:3: lv_existentials_3_0= ruleExistential
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getClauseAccess().getExistentialsExistentialParserRuleCall_0_2_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FOLLOW_ruleExistential_in_ruleClause1267);
                    	    lv_existentials_3_0=ruleExistential();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getClauseRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"existentials",
                    	    	        		lv_existentials_3_0, 
                    	    	        		"Existential", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop12;
                        }
                    } while (true);

                    match(input,24,FOLLOW_24_in_ruleClause1279); 

                            createLeafNode(grammarAccess.getClauseAccess().getColonKeyword_0_3(), null); 
                        

                    }
                    break;

            }

            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:839:3: ( (lv_constraints_5_0= ruleConstraint ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:840:1: (lv_constraints_5_0= ruleConstraint )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:840:1: (lv_constraints_5_0= ruleConstraint )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:841:3: lv_constraints_5_0= ruleConstraint
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getClauseAccess().getConstraintsConstraintParserRuleCall_1_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleConstraint_in_ruleClause1302);
            lv_constraints_5_0=ruleConstraint();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getClauseRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		add(
            	       			current, 
            	       			"constraints",
            	        		lv_constraints_5_0, 
            	        		"Constraint", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:863:2: ( '&' ( (lv_constraints_7_0= ruleConstraint ) ) )*
            loop14:
            do {
                int alt14=2;
                int LA14_0 = input.LA(1);

                if ( (LA14_0==25) ) {
                    alt14=1;
                }


                switch (alt14) {
            	case 1 :
            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:863:4: '&' ( (lv_constraints_7_0= ruleConstraint ) )
            	    {
            	    match(input,25,FOLLOW_25_in_ruleClause1313); 

            	            createLeafNode(grammarAccess.getClauseAccess().getAmpersandKeyword_2_0(), null); 
            	        
            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:867:1: ( (lv_constraints_7_0= ruleConstraint ) )
            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:868:1: (lv_constraints_7_0= ruleConstraint )
            	    {
            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:868:1: (lv_constraints_7_0= ruleConstraint )
            	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:869:3: lv_constraints_7_0= ruleConstraint
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getClauseAccess().getConstraintsConstraintParserRuleCall_2_1_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleConstraint_in_ruleClause1334);
            	    lv_constraints_7_0=ruleConstraint();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getClauseRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"constraints",
            	    	        		lv_constraints_7_0, 
            	    	        		"Constraint", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop14;
                }
            } while (true);


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleClause


    // $ANTLR start entryRuleExistential
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:899:1: entryRuleExistential returns [EObject current=null] : iv_ruleExistential= ruleExistential EOF ;
    public final EObject entryRuleExistential() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExistential = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:900:2: (iv_ruleExistential= ruleExistential EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:901:2: iv_ruleExistential= ruleExistential EOF
            {
             currentNode = createCompositeNode(grammarAccess.getExistentialRule(), currentNode); 
            pushFollow(FOLLOW_ruleExistential_in_entryRuleExistential1372);
            iv_ruleExistential=ruleExistential();
            _fsp--;

             current =iv_ruleExistential; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleExistential1382); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleExistential


    // $ANTLR start ruleExistential
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:908:1: ruleExistential returns [EObject current=null] : ( (lv_name_0_0= RULE_ID ) ) ;
    public final EObject ruleExistential() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:913:6: ( ( (lv_name_0_0= RULE_ID ) ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:914:1: ( (lv_name_0_0= RULE_ID ) )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:914:1: ( (lv_name_0_0= RULE_ID ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:915:1: (lv_name_0_0= RULE_ID )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:915:1: (lv_name_0_0= RULE_ID )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:916:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleExistential1423); 

            			createLeafNode(grammarAccess.getExistentialAccess().getNameIDTerminalRuleCall_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getExistentialRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_0_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleExistential


    // $ANTLR start entryRuleConstraint
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:946:1: entryRuleConstraint returns [EObject current=null] : iv_ruleConstraint= ruleConstraint EOF ;
    public final EObject entryRuleConstraint() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleConstraint = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:947:2: (iv_ruleConstraint= ruleConstraint EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:948:2: iv_ruleConstraint= ruleConstraint EOF
            {
             currentNode = createCompositeNode(grammarAccess.getConstraintRule(), currentNode); 
            pushFollow(FOLLOW_ruleConstraint_in_entryRuleConstraint1463);
            iv_ruleConstraint=ruleConstraint();
            _fsp--;

             current =iv_ruleConstraint; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleConstraint1473); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleConstraint


    // $ANTLR start ruleConstraint
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:955:1: ruleConstraint returns [EObject current=null] : ( ( '[' this_BasicConstraint_1= ruleBasicConstraint ( (lv_inferred_2_0= ']' ) ) ) | this_BasicConstraint_3= ruleBasicConstraint ) ;
    public final EObject ruleConstraint() throws RecognitionException {
        EObject current = null;

        Token lv_inferred_2_0=null;
        EObject this_BasicConstraint_1 = null;

        EObject this_BasicConstraint_3 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:960:6: ( ( ( '[' this_BasicConstraint_1= ruleBasicConstraint ( (lv_inferred_2_0= ']' ) ) ) | this_BasicConstraint_3= ruleBasicConstraint ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:961:1: ( ( '[' this_BasicConstraint_1= ruleBasicConstraint ( (lv_inferred_2_0= ']' ) ) ) | this_BasicConstraint_3= ruleBasicConstraint )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:961:1: ( ( '[' this_BasicConstraint_1= ruleBasicConstraint ( (lv_inferred_2_0= ']' ) ) ) | this_BasicConstraint_3= ruleBasicConstraint )
            int alt15=2;
            int LA15_0 = input.LA(1);

            if ( (LA15_0==26) ) {
                alt15=1;
            }
            else if ( (LA15_0==RULE_ID||(LA15_0>=RULE_BIG_INT && LA15_0<=RULE_BOOL)||LA15_0==14||LA15_0==32) ) {
                alt15=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("961:1: ( ( '[' this_BasicConstraint_1= ruleBasicConstraint ( (lv_inferred_2_0= ']' ) ) ) | this_BasicConstraint_3= ruleBasicConstraint )", 15, 0, input);

                throw nvae;
            }
            switch (alt15) {
                case 1 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:961:2: ( '[' this_BasicConstraint_1= ruleBasicConstraint ( (lv_inferred_2_0= ']' ) ) )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:961:2: ( '[' this_BasicConstraint_1= ruleBasicConstraint ( (lv_inferred_2_0= ']' ) ) )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:961:4: '[' this_BasicConstraint_1= ruleBasicConstraint ( (lv_inferred_2_0= ']' ) )
                    {
                    match(input,26,FOLLOW_26_in_ruleConstraint1509); 

                            createLeafNode(grammarAccess.getConstraintAccess().getLeftSquareBracketKeyword_0_0(), null); 
                        
                     
                            currentNode=createCompositeNode(grammarAccess.getConstraintAccess().getBasicConstraintParserRuleCall_0_1(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleBasicConstraint_in_ruleConstraint1531);
                    this_BasicConstraint_1=ruleBasicConstraint();
                    _fsp--;

                     
                            current = this_BasicConstraint_1; 
                            currentNode = currentNode.getParent();
                        
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:974:1: ( (lv_inferred_2_0= ']' ) )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:975:1: (lv_inferred_2_0= ']' )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:975:1: (lv_inferred_2_0= ']' )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:976:3: lv_inferred_2_0= ']'
                    {
                    lv_inferred_2_0=(Token)input.LT(1);
                    match(input,27,FOLLOW_27_in_ruleConstraint1548); 

                            createLeafNode(grammarAccess.getConstraintAccess().getInferredRightSquareBracketKeyword_0_2_0(), "inferred"); 
                        

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getConstraintRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        
                    	        try {
                    	       		set(current, "inferred", true, "]", lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:997:5: this_BasicConstraint_3= ruleBasicConstraint
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getConstraintAccess().getBasicConstraintParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleBasicConstraint_in_ruleConstraint1590);
                    this_BasicConstraint_3=ruleBasicConstraint();
                    _fsp--;

                     
                            current = this_BasicConstraint_3; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleConstraint


    // $ANTLR start entryRuleBasicConstraint
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1013:1: entryRuleBasicConstraint returns [EObject current=null] : iv_ruleBasicConstraint= ruleBasicConstraint EOF ;
    public final EObject entryRuleBasicConstraint() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleBasicConstraint = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1014:2: (iv_ruleBasicConstraint= ruleBasicConstraint EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1015:2: iv_ruleBasicConstraint= ruleBasicConstraint EOF
            {
             currentNode = createCompositeNode(grammarAccess.getBasicConstraintRule(), currentNode); 
            pushFollow(FOLLOW_ruleBasicConstraint_in_entryRuleBasicConstraint1625);
            iv_ruleBasicConstraint=ruleBasicConstraint();
            _fsp--;

             current =iv_ruleBasicConstraint; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleBasicConstraint1635); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleBasicConstraint


    // $ANTLR start ruleBasicConstraint
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1022:1: ruleBasicConstraint returns [EObject current=null] : (this_Boolean_0= ruleBoolean | this_Inclusion_1= ruleInclusion | this_Equation_2= ruleEquation ) ;
    public final EObject ruleBasicConstraint() throws RecognitionException {
        EObject current = null;

        EObject this_Boolean_0 = null;

        EObject this_Inclusion_1 = null;

        EObject this_Equation_2 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1027:6: ( (this_Boolean_0= ruleBoolean | this_Inclusion_1= ruleInclusion | this_Equation_2= ruleEquation ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1028:1: (this_Boolean_0= ruleBoolean | this_Inclusion_1= ruleInclusion | this_Equation_2= ruleEquation )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1028:1: (this_Boolean_0= ruleBoolean | this_Inclusion_1= ruleInclusion | this_Equation_2= ruleEquation )
            int alt16=3;
            switch ( input.LA(1) ) {
            case RULE_BOOL:
                {
                alt16=1;
                }
                break;
            case RULE_ID:
                {
                int LA16_2 = input.LA(2);

                if ( (LA16_2==14) ) {
                    alt16=2;
                }
                else if ( ((LA16_2>=28 && LA16_2<=36)) ) {
                    alt16=3;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("1028:1: (this_Boolean_0= ruleBoolean | this_Inclusion_1= ruleInclusion | this_Equation_2= ruleEquation )", 16, 2, input);

                    throw nvae;
                }
                }
                break;
            case RULE_BIG_INT:
            case 14:
            case 32:
                {
                alt16=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("1028:1: (this_Boolean_0= ruleBoolean | this_Inclusion_1= ruleInclusion | this_Equation_2= ruleEquation )", 16, 0, input);

                throw nvae;
            }

            switch (alt16) {
                case 1 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1029:5: this_Boolean_0= ruleBoolean
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getBasicConstraintAccess().getBooleanParserRuleCall_0(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleBoolean_in_ruleBasicConstraint1682);
                    this_Boolean_0=ruleBoolean();
                    _fsp--;

                     
                            current = this_Boolean_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1039:5: this_Inclusion_1= ruleInclusion
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getBasicConstraintAccess().getInclusionParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleInclusion_in_ruleBasicConstraint1709);
                    this_Inclusion_1=ruleInclusion();
                    _fsp--;

                     
                            current = this_Inclusion_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 3 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1049:5: this_Equation_2= ruleEquation
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getBasicConstraintAccess().getEquationParserRuleCall_2(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleEquation_in_ruleBasicConstraint1736);
                    this_Equation_2=ruleEquation();
                    _fsp--;

                     
                            current = this_Equation_2; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleBasicConstraint


    // $ANTLR start entryRuleBoolean
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1065:1: entryRuleBoolean returns [EObject current=null] : iv_ruleBoolean= ruleBoolean EOF ;
    public final EObject entryRuleBoolean() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleBoolean = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1066:2: (iv_ruleBoolean= ruleBoolean EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1067:2: iv_ruleBoolean= ruleBoolean EOF
            {
             currentNode = createCompositeNode(grammarAccess.getBooleanRule(), currentNode); 
            pushFollow(FOLLOW_ruleBoolean_in_entryRuleBoolean1771);
            iv_ruleBoolean=ruleBoolean();
            _fsp--;

             current =iv_ruleBoolean; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleBoolean1781); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleBoolean


    // $ANTLR start ruleBoolean
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1074:1: ruleBoolean returns [EObject current=null] : ( (lv_value_0_0= RULE_BOOL ) ) ;
    public final EObject ruleBoolean() throws RecognitionException {
        EObject current = null;

        Token lv_value_0_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1079:6: ( ( (lv_value_0_0= RULE_BOOL ) ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1080:1: ( (lv_value_0_0= RULE_BOOL ) )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1080:1: ( (lv_value_0_0= RULE_BOOL ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1081:1: (lv_value_0_0= RULE_BOOL )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1081:1: (lv_value_0_0= RULE_BOOL )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1082:3: lv_value_0_0= RULE_BOOL
            {
            lv_value_0_0=(Token)input.LT(1);
            match(input,RULE_BOOL,FOLLOW_RULE_BOOL_in_ruleBoolean1822); 

            			createLeafNode(grammarAccess.getBooleanAccess().getValueBOOLTerminalRuleCall_0(), "value"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getBooleanRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"value",
            	        		lv_value_0_0, 
            	        		"BOOL", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleBoolean


    // $ANTLR start entryRuleInclusion
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1112:1: entryRuleInclusion returns [EObject current=null] : iv_ruleInclusion= ruleInclusion EOF ;
    public final EObject entryRuleInclusion() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleInclusion = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1113:2: (iv_ruleInclusion= ruleInclusion EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1114:2: iv_ruleInclusion= ruleInclusion EOF
            {
             currentNode = createCompositeNode(grammarAccess.getInclusionRule(), currentNode); 
            pushFollow(FOLLOW_ruleInclusion_in_entryRuleInclusion1862);
            iv_ruleInclusion=ruleInclusion();
            _fsp--;

             current =iv_ruleInclusion; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleInclusion1872); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleInclusion


    // $ANTLR start ruleInclusion
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1121:1: ruleInclusion returns [EObject current=null] : ( ( ( RULE_ID ) ) '(' ( ( ( RULE_ID ) ) ( ',' ( ( RULE_ID ) ) )* )? ')' ) ;
    public final EObject ruleInclusion() throws RecognitionException {
        EObject current = null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1126:6: ( ( ( ( RULE_ID ) ) '(' ( ( ( RULE_ID ) ) ( ',' ( ( RULE_ID ) ) )* )? ')' ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1127:1: ( ( ( RULE_ID ) ) '(' ( ( ( RULE_ID ) ) ( ',' ( ( RULE_ID ) ) )* )? ')' )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1127:1: ( ( ( RULE_ID ) ) '(' ( ( ( RULE_ID ) ) ( ',' ( ( RULE_ID ) ) )* )? ')' )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1127:2: ( ( RULE_ID ) ) '(' ( ( ( RULE_ID ) ) ( ',' ( ( RULE_ID ) ) )* )? ')'
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1127:2: ( ( RULE_ID ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1128:1: ( RULE_ID )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1128:1: ( RULE_ID )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1129:3: RULE_ID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getInclusionRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleInclusion1915); 

            		createLeafNode(grammarAccess.getInclusionAccess().getTargetPropertyCrossReference_0_0(), "target"); 
            	

            }


            }

            match(input,14,FOLLOW_14_in_ruleInclusion1925); 

                    createLeafNode(grammarAccess.getInclusionAccess().getLeftParenthesisKeyword_1(), null); 
                
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1145:1: ( ( ( RULE_ID ) ) ( ',' ( ( RULE_ID ) ) )* )?
            int alt18=2;
            int LA18_0 = input.LA(1);

            if ( (LA18_0==RULE_ID) ) {
                alt18=1;
            }
            switch (alt18) {
                case 1 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1145:2: ( ( RULE_ID ) ) ( ',' ( ( RULE_ID ) ) )*
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1145:2: ( ( RULE_ID ) )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1146:1: ( RULE_ID )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1146:1: ( RULE_ID )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1147:3: RULE_ID
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getInclusionRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleInclusion1944); 

                    		createLeafNode(grammarAccess.getInclusionAccess().getArgumentsVariableCrossReference_2_0_0(), "arguments"); 
                    	

                    }


                    }

                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1159:2: ( ',' ( ( RULE_ID ) ) )*
                    loop17:
                    do {
                        int alt17=2;
                        int LA17_0 = input.LA(1);

                        if ( (LA17_0==15) ) {
                            alt17=1;
                        }


                        switch (alt17) {
                    	case 1 :
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1159:4: ',' ( ( RULE_ID ) )
                    	    {
                    	    match(input,15,FOLLOW_15_in_ruleInclusion1955); 

                    	            createLeafNode(grammarAccess.getInclusionAccess().getCommaKeyword_2_1_0(), null); 
                    	        
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1163:1: ( ( RULE_ID ) )
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1164:1: ( RULE_ID )
                    	    {
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1164:1: ( RULE_ID )
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1165:3: RULE_ID
                    	    {

                    	    			if (current==null) {
                    	    	            current = factory.create(grammarAccess.getInclusionRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode, current);
                    	    	        }
                    	            
                    	    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleInclusion1973); 

                    	    		createLeafNode(grammarAccess.getInclusionAccess().getArgumentsVariableCrossReference_2_1_1_0(), "arguments"); 
                    	    	

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop17;
                        }
                    } while (true);


                    }
                    break;

            }

            match(input,16,FOLLOW_16_in_ruleInclusion1987); 

                    createLeafNode(grammarAccess.getInclusionAccess().getRightParenthesisKeyword_3(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleInclusion


    // $ANTLR start entryRuleEquation
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1189:1: entryRuleEquation returns [EObject current=null] : iv_ruleEquation= ruleEquation EOF ;
    public final EObject entryRuleEquation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEquation = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1190:2: (iv_ruleEquation= ruleEquation EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1191:2: iv_ruleEquation= ruleEquation EOF
            {
             currentNode = createCompositeNode(grammarAccess.getEquationRule(), currentNode); 
            pushFollow(FOLLOW_ruleEquation_in_entryRuleEquation2023);
            iv_ruleEquation=ruleEquation();
            _fsp--;

             current =iv_ruleEquation; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleEquation2033); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleEquation


    // $ANTLR start ruleEquation
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1198:1: ruleEquation returns [EObject current=null] : ( ( (lv_left_0_0= ruleTopLevelExpression ) ) ( (lv_type_1_0= ruleEquationType ) ) ( (lv_right_2_0= ruleTopLevelExpression ) ) ) ;
    public final EObject ruleEquation() throws RecognitionException {
        EObject current = null;

        EObject lv_left_0_0 = null;

        Enumerator lv_type_1_0 = null;

        EObject lv_right_2_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1203:6: ( ( ( (lv_left_0_0= ruleTopLevelExpression ) ) ( (lv_type_1_0= ruleEquationType ) ) ( (lv_right_2_0= ruleTopLevelExpression ) ) ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1204:1: ( ( (lv_left_0_0= ruleTopLevelExpression ) ) ( (lv_type_1_0= ruleEquationType ) ) ( (lv_right_2_0= ruleTopLevelExpression ) ) )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1204:1: ( ( (lv_left_0_0= ruleTopLevelExpression ) ) ( (lv_type_1_0= ruleEquationType ) ) ( (lv_right_2_0= ruleTopLevelExpression ) ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1204:2: ( (lv_left_0_0= ruleTopLevelExpression ) ) ( (lv_type_1_0= ruleEquationType ) ) ( (lv_right_2_0= ruleTopLevelExpression ) )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1204:2: ( (lv_left_0_0= ruleTopLevelExpression ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1205:1: (lv_left_0_0= ruleTopLevelExpression )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1205:1: (lv_left_0_0= ruleTopLevelExpression )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1206:3: lv_left_0_0= ruleTopLevelExpression
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getEquationAccess().getLeftTopLevelExpressionParserRuleCall_0_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleTopLevelExpression_in_ruleEquation2079);
            lv_left_0_0=ruleTopLevelExpression();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getEquationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"left",
            	        		lv_left_0_0, 
            	        		"TopLevelExpression", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1228:2: ( (lv_type_1_0= ruleEquationType ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1229:1: (lv_type_1_0= ruleEquationType )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1229:1: (lv_type_1_0= ruleEquationType )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1230:3: lv_type_1_0= ruleEquationType
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getEquationAccess().getTypeEquationTypeEnumRuleCall_1_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleEquationType_in_ruleEquation2100);
            lv_type_1_0=ruleEquationType();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getEquationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"type",
            	        		lv_type_1_0, 
            	        		"EquationType", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1252:2: ( (lv_right_2_0= ruleTopLevelExpression ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1253:1: (lv_right_2_0= ruleTopLevelExpression )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1253:1: (lv_right_2_0= ruleTopLevelExpression )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1254:3: lv_right_2_0= ruleTopLevelExpression
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getEquationAccess().getRightTopLevelExpressionParserRuleCall_2_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleTopLevelExpression_in_ruleEquation2121);
            lv_right_2_0=ruleTopLevelExpression();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getEquationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"right",
            	        		lv_right_2_0, 
            	        		"TopLevelExpression", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleEquation


    // $ANTLR start entryRuleAddition
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1284:1: entryRuleAddition returns [EObject current=null] : iv_ruleAddition= ruleAddition EOF ;
    public final EObject entryRuleAddition() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAddition = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1285:2: (iv_ruleAddition= ruleAddition EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1286:2: iv_ruleAddition= ruleAddition EOF
            {
             currentNode = createCompositeNode(grammarAccess.getAdditionRule(), currentNode); 
            pushFollow(FOLLOW_ruleAddition_in_entryRuleAddition2157);
            iv_ruleAddition=ruleAddition();
            _fsp--;

             current =iv_ruleAddition; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAddition2167); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleAddition


    // $ANTLR start ruleAddition
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1293:1: ruleAddition returns [EObject current=null] : (this_Multiplication_0= ruleMultiplication ( () ( ( '+' ( (lv_operands_3_0= ruleMultiplication ) ) ) | ( (lv_operands_4_0= ruleNegation ) ) )+ )? ) ;
    public final EObject ruleAddition() throws RecognitionException {
        EObject current = null;

        EObject this_Multiplication_0 = null;

        EObject lv_operands_3_0 = null;

        EObject lv_operands_4_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1298:6: ( (this_Multiplication_0= ruleMultiplication ( () ( ( '+' ( (lv_operands_3_0= ruleMultiplication ) ) ) | ( (lv_operands_4_0= ruleNegation ) ) )+ )? ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1299:1: (this_Multiplication_0= ruleMultiplication ( () ( ( '+' ( (lv_operands_3_0= ruleMultiplication ) ) ) | ( (lv_operands_4_0= ruleNegation ) ) )+ )? )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1299:1: (this_Multiplication_0= ruleMultiplication ( () ( ( '+' ( (lv_operands_3_0= ruleMultiplication ) ) ) | ( (lv_operands_4_0= ruleNegation ) ) )+ )? )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1300:5: this_Multiplication_0= ruleMultiplication ( () ( ( '+' ( (lv_operands_3_0= ruleMultiplication ) ) ) | ( (lv_operands_4_0= ruleNegation ) ) )+ )?
            {
             
                    currentNode=createCompositeNode(grammarAccess.getAdditionAccess().getMultiplicationParserRuleCall_0(), currentNode); 
                
            pushFollow(FOLLOW_ruleMultiplication_in_ruleAddition2214);
            this_Multiplication_0=ruleMultiplication();
            _fsp--;

             
                    current = this_Multiplication_0; 
                    currentNode = currentNode.getParent();
                
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1308:1: ( () ( ( '+' ( (lv_operands_3_0= ruleMultiplication ) ) ) | ( (lv_operands_4_0= ruleNegation ) ) )+ )?
            int alt20=2;
            int LA20_0 = input.LA(1);

            if ( (LA20_0==28||LA20_0==32) ) {
                alt20=1;
            }
            switch (alt20) {
                case 1 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1308:2: () ( ( '+' ( (lv_operands_3_0= ruleMultiplication ) ) ) | ( (lv_operands_4_0= ruleNegation ) ) )+
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1308:2: ()
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1309:5: 
                    {
                     
                            temp=factory.create(grammarAccess.getAdditionAccess().getAdditionOperandsAction_1_0().getType().getClassifier());
                            try {
                            	factory.add(temp, "operands", current, null /*ParserRule*/, currentNode);
                            } catch(ValueConverterException vce) {
                            	handleValueConverterException(vce);
                            }
                            current = temp; 
                            temp = null;
                            CompositeNode newNode = createCompositeNode(grammarAccess.getAdditionAccess().getAdditionOperandsAction_1_0(), currentNode.getParent());
                        newNode.getChildren().add(currentNode);
                        moveLookaheadInfo(currentNode, newNode);
                        currentNode = newNode; 
                            associateNodeWithAstElement(currentNode, current); 
                        

                    }

                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1324:2: ( ( '+' ( (lv_operands_3_0= ruleMultiplication ) ) ) | ( (lv_operands_4_0= ruleNegation ) ) )+
                    int cnt19=0;
                    loop19:
                    do {
                        int alt19=3;
                        int LA19_0 = input.LA(1);

                        if ( (LA19_0==28) ) {
                            alt19=1;
                        }
                        else if ( (LA19_0==32) ) {
                            alt19=2;
                        }


                        switch (alt19) {
                    	case 1 :
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1324:3: ( '+' ( (lv_operands_3_0= ruleMultiplication ) ) )
                    	    {
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1324:3: ( '+' ( (lv_operands_3_0= ruleMultiplication ) ) )
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1324:5: '+' ( (lv_operands_3_0= ruleMultiplication ) )
                    	    {
                    	    match(input,28,FOLLOW_28_in_ruleAddition2235); 

                    	            createLeafNode(grammarAccess.getAdditionAccess().getPlusSignKeyword_1_1_0_0(), null); 
                    	        
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1328:1: ( (lv_operands_3_0= ruleMultiplication ) )
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1329:1: (lv_operands_3_0= ruleMultiplication )
                    	    {
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1329:1: (lv_operands_3_0= ruleMultiplication )
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1330:3: lv_operands_3_0= ruleMultiplication
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getAdditionAccess().getOperandsMultiplicationParserRuleCall_1_1_0_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FOLLOW_ruleMultiplication_in_ruleAddition2256);
                    	    lv_operands_3_0=ruleMultiplication();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getAdditionRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"operands",
                    	    	        		lv_operands_3_0, 
                    	    	        		"Multiplication", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1353:6: ( (lv_operands_4_0= ruleNegation ) )
                    	    {
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1353:6: ( (lv_operands_4_0= ruleNegation ) )
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1354:1: (lv_operands_4_0= ruleNegation )
                    	    {
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1354:1: (lv_operands_4_0= ruleNegation )
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1355:3: lv_operands_4_0= ruleNegation
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getAdditionAccess().getOperandsNegationParserRuleCall_1_1_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FOLLOW_ruleNegation_in_ruleAddition2284);
                    	    lv_operands_4_0=ruleNegation();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getAdditionRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"operands",
                    	    	        		lv_operands_4_0, 
                    	    	        		"Negation", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt19 >= 1 ) break loop19;
                                EarlyExitException eee =
                                    new EarlyExitException(19, input);
                                throw eee;
                        }
                        cnt19++;
                    } while (true);


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleAddition


    // $ANTLR start entryRuleMultiplication
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1385:1: entryRuleMultiplication returns [EObject current=null] : iv_ruleMultiplication= ruleMultiplication EOF ;
    public final EObject entryRuleMultiplication() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMultiplication = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1386:2: (iv_ruleMultiplication= ruleMultiplication EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1387:2: iv_ruleMultiplication= ruleMultiplication EOF
            {
             currentNode = createCompositeNode(grammarAccess.getMultiplicationRule(), currentNode); 
            pushFollow(FOLLOW_ruleMultiplication_in_entryRuleMultiplication2324);
            iv_ruleMultiplication=ruleMultiplication();
            _fsp--;

             current =iv_ruleMultiplication; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleMultiplication2334); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleMultiplication


    // $ANTLR start ruleMultiplication
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1394:1: ruleMultiplication returns [EObject current=null] : (this_Division_0= ruleDivision ( () ( '*' ( (lv_operands_3_0= ruleDivision ) ) )+ )? ) ;
    public final EObject ruleMultiplication() throws RecognitionException {
        EObject current = null;

        EObject this_Division_0 = null;

        EObject lv_operands_3_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1399:6: ( (this_Division_0= ruleDivision ( () ( '*' ( (lv_operands_3_0= ruleDivision ) ) )+ )? ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1400:1: (this_Division_0= ruleDivision ( () ( '*' ( (lv_operands_3_0= ruleDivision ) ) )+ )? )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1400:1: (this_Division_0= ruleDivision ( () ( '*' ( (lv_operands_3_0= ruleDivision ) ) )+ )? )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1401:5: this_Division_0= ruleDivision ( () ( '*' ( (lv_operands_3_0= ruleDivision ) ) )+ )?
            {
             
                    currentNode=createCompositeNode(grammarAccess.getMultiplicationAccess().getDivisionParserRuleCall_0(), currentNode); 
                
            pushFollow(FOLLOW_ruleDivision_in_ruleMultiplication2381);
            this_Division_0=ruleDivision();
            _fsp--;

             
                    current = this_Division_0; 
                    currentNode = currentNode.getParent();
                
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1409:1: ( () ( '*' ( (lv_operands_3_0= ruleDivision ) ) )+ )?
            int alt22=2;
            int LA22_0 = input.LA(1);

            if ( (LA22_0==29) ) {
                alt22=1;
            }
            switch (alt22) {
                case 1 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1409:2: () ( '*' ( (lv_operands_3_0= ruleDivision ) ) )+
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1409:2: ()
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1410:5: 
                    {
                     
                            temp=factory.create(grammarAccess.getMultiplicationAccess().getMultiplicationOperandsAction_1_0().getType().getClassifier());
                            try {
                            	factory.add(temp, "operands", current, null /*ParserRule*/, currentNode);
                            } catch(ValueConverterException vce) {
                            	handleValueConverterException(vce);
                            }
                            current = temp; 
                            temp = null;
                            CompositeNode newNode = createCompositeNode(grammarAccess.getMultiplicationAccess().getMultiplicationOperandsAction_1_0(), currentNode.getParent());
                        newNode.getChildren().add(currentNode);
                        moveLookaheadInfo(currentNode, newNode);
                        currentNode = newNode; 
                            associateNodeWithAstElement(currentNode, current); 
                        

                    }

                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1425:2: ( '*' ( (lv_operands_3_0= ruleDivision ) ) )+
                    int cnt21=0;
                    loop21:
                    do {
                        int alt21=2;
                        int LA21_0 = input.LA(1);

                        if ( (LA21_0==29) ) {
                            alt21=1;
                        }


                        switch (alt21) {
                    	case 1 :
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1425:4: '*' ( (lv_operands_3_0= ruleDivision ) )
                    	    {
                    	    match(input,29,FOLLOW_29_in_ruleMultiplication2401); 

                    	            createLeafNode(grammarAccess.getMultiplicationAccess().getAsteriskKeyword_1_1_0(), null); 
                    	        
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1429:1: ( (lv_operands_3_0= ruleDivision ) )
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1430:1: (lv_operands_3_0= ruleDivision )
                    	    {
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1430:1: (lv_operands_3_0= ruleDivision )
                    	    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1431:3: lv_operands_3_0= ruleDivision
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getMultiplicationAccess().getOperandsDivisionParserRuleCall_1_1_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FOLLOW_ruleDivision_in_ruleMultiplication2422);
                    	    lv_operands_3_0=ruleDivision();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getMultiplicationRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"operands",
                    	    	        		lv_operands_3_0, 
                    	    	        		"Division", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt21 >= 1 ) break loop21;
                                EarlyExitException eee =
                                    new EarlyExitException(21, input);
                                throw eee;
                        }
                        cnt21++;
                    } while (true);


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleMultiplication


    // $ANTLR start entryRuleDivision
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1461:1: entryRuleDivision returns [EObject current=null] : iv_ruleDivision= ruleDivision EOF ;
    public final EObject entryRuleDivision() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDivision = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1462:2: (iv_ruleDivision= ruleDivision EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1463:2: iv_ruleDivision= ruleDivision EOF
            {
             currentNode = createCompositeNode(grammarAccess.getDivisionRule(), currentNode); 
            pushFollow(FOLLOW_ruleDivision_in_entryRuleDivision2462);
            iv_ruleDivision=ruleDivision();
            _fsp--;

             current =iv_ruleDivision; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleDivision2472); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleDivision


    // $ANTLR start ruleDivision
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1470:1: ruleDivision returns [EObject current=null] : (this_Exponentiation_0= ruleExponentiation ( () '/' ( (lv_right_3_0= ruleExponentiation ) ) )? ) ;
    public final EObject ruleDivision() throws RecognitionException {
        EObject current = null;

        EObject this_Exponentiation_0 = null;

        EObject lv_right_3_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1475:6: ( (this_Exponentiation_0= ruleExponentiation ( () '/' ( (lv_right_3_0= ruleExponentiation ) ) )? ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1476:1: (this_Exponentiation_0= ruleExponentiation ( () '/' ( (lv_right_3_0= ruleExponentiation ) ) )? )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1476:1: (this_Exponentiation_0= ruleExponentiation ( () '/' ( (lv_right_3_0= ruleExponentiation ) ) )? )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1477:5: this_Exponentiation_0= ruleExponentiation ( () '/' ( (lv_right_3_0= ruleExponentiation ) ) )?
            {
             
                    currentNode=createCompositeNode(grammarAccess.getDivisionAccess().getExponentiationParserRuleCall_0(), currentNode); 
                
            pushFollow(FOLLOW_ruleExponentiation_in_ruleDivision2519);
            this_Exponentiation_0=ruleExponentiation();
            _fsp--;

             
                    current = this_Exponentiation_0; 
                    currentNode = currentNode.getParent();
                
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1485:1: ( () '/' ( (lv_right_3_0= ruleExponentiation ) ) )?
            int alt23=2;
            int LA23_0 = input.LA(1);

            if ( (LA23_0==30) ) {
                alt23=1;
            }
            switch (alt23) {
                case 1 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1485:2: () '/' ( (lv_right_3_0= ruleExponentiation ) )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1485:2: ()
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1486:5: 
                    {
                     
                            temp=factory.create(grammarAccess.getDivisionAccess().getDivisionLeftAction_1_0().getType().getClassifier());
                            try {
                            	factory.set(temp, "left", current, null /*ParserRule*/, currentNode);
                            } catch(ValueConverterException vce) {
                            	handleValueConverterException(vce);
                            }
                            current = temp; 
                            temp = null;
                            CompositeNode newNode = createCompositeNode(grammarAccess.getDivisionAccess().getDivisionLeftAction_1_0(), currentNode.getParent());
                        newNode.getChildren().add(currentNode);
                        moveLookaheadInfo(currentNode, newNode);
                        currentNode = newNode; 
                            associateNodeWithAstElement(currentNode, current); 
                        

                    }

                    match(input,30,FOLLOW_30_in_ruleDivision2538); 

                            createLeafNode(grammarAccess.getDivisionAccess().getSolidusKeyword_1_1(), null); 
                        
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1505:1: ( (lv_right_3_0= ruleExponentiation ) )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1506:1: (lv_right_3_0= ruleExponentiation )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1506:1: (lv_right_3_0= ruleExponentiation )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1507:3: lv_right_3_0= ruleExponentiation
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getDivisionAccess().getRightExponentiationParserRuleCall_1_2_0(), currentNode); 
                    	    
                    pushFollow(FOLLOW_ruleExponentiation_in_ruleDivision2559);
                    lv_right_3_0=ruleExponentiation();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getDivisionRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"right",
                    	        		lv_right_3_0, 
                    	        		"Exponentiation", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleDivision


    // $ANTLR start entryRuleExponentiation
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1537:1: entryRuleExponentiation returns [EObject current=null] : iv_ruleExponentiation= ruleExponentiation EOF ;
    public final EObject entryRuleExponentiation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExponentiation = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1538:2: (iv_ruleExponentiation= ruleExponentiation EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1539:2: iv_ruleExponentiation= ruleExponentiation EOF
            {
             currentNode = createCompositeNode(grammarAccess.getExponentiationRule(), currentNode); 
            pushFollow(FOLLOW_ruleExponentiation_in_entryRuleExponentiation2597);
            iv_ruleExponentiation=ruleExponentiation();
            _fsp--;

             current =iv_ruleExponentiation; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleExponentiation2607); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleExponentiation


    // $ANTLR start ruleExponentiation
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1546:1: ruleExponentiation returns [EObject current=null] : (this_PrimaryExpression_0= rulePrimaryExpression ( () '^' ( (lv_right_3_0= rulePrimaryExpression ) ) )? ) ;
    public final EObject ruleExponentiation() throws RecognitionException {
        EObject current = null;

        EObject this_PrimaryExpression_0 = null;

        EObject lv_right_3_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1551:6: ( (this_PrimaryExpression_0= rulePrimaryExpression ( () '^' ( (lv_right_3_0= rulePrimaryExpression ) ) )? ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1552:1: (this_PrimaryExpression_0= rulePrimaryExpression ( () '^' ( (lv_right_3_0= rulePrimaryExpression ) ) )? )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1552:1: (this_PrimaryExpression_0= rulePrimaryExpression ( () '^' ( (lv_right_3_0= rulePrimaryExpression ) ) )? )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1553:5: this_PrimaryExpression_0= rulePrimaryExpression ( () '^' ( (lv_right_3_0= rulePrimaryExpression ) ) )?
            {
             
                    currentNode=createCompositeNode(grammarAccess.getExponentiationAccess().getPrimaryExpressionParserRuleCall_0(), currentNode); 
                
            pushFollow(FOLLOW_rulePrimaryExpression_in_ruleExponentiation2654);
            this_PrimaryExpression_0=rulePrimaryExpression();
            _fsp--;

             
                    current = this_PrimaryExpression_0; 
                    currentNode = currentNode.getParent();
                
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1561:1: ( () '^' ( (lv_right_3_0= rulePrimaryExpression ) ) )?
            int alt24=2;
            int LA24_0 = input.LA(1);

            if ( (LA24_0==31) ) {
                alt24=1;
            }
            switch (alt24) {
                case 1 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1561:2: () '^' ( (lv_right_3_0= rulePrimaryExpression ) )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1561:2: ()
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1562:5: 
                    {
                     
                            temp=factory.create(grammarAccess.getExponentiationAccess().getExponentiationLeftAction_1_0().getType().getClassifier());
                            try {
                            	factory.set(temp, "left", current, null /*ParserRule*/, currentNode);
                            } catch(ValueConverterException vce) {
                            	handleValueConverterException(vce);
                            }
                            current = temp; 
                            temp = null;
                            CompositeNode newNode = createCompositeNode(grammarAccess.getExponentiationAccess().getExponentiationLeftAction_1_0(), currentNode.getParent());
                        newNode.getChildren().add(currentNode);
                        moveLookaheadInfo(currentNode, newNode);
                        currentNode = newNode; 
                            associateNodeWithAstElement(currentNode, current); 
                        

                    }

                    match(input,31,FOLLOW_31_in_ruleExponentiation2673); 

                            createLeafNode(grammarAccess.getExponentiationAccess().getCircumflexAccentKeyword_1_1(), null); 
                        
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1581:1: ( (lv_right_3_0= rulePrimaryExpression ) )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1582:1: (lv_right_3_0= rulePrimaryExpression )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1582:1: (lv_right_3_0= rulePrimaryExpression )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1583:3: lv_right_3_0= rulePrimaryExpression
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getExponentiationAccess().getRightPrimaryExpressionParserRuleCall_1_2_0(), currentNode); 
                    	    
                    pushFollow(FOLLOW_rulePrimaryExpression_in_ruleExponentiation2694);
                    lv_right_3_0=rulePrimaryExpression();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getExponentiationRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"right",
                    	        		lv_right_3_0, 
                    	        		"PrimaryExpression", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleExponentiation


    // $ANTLR start entryRuleNegation
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1613:1: entryRuleNegation returns [EObject current=null] : iv_ruleNegation= ruleNegation EOF ;
    public final EObject entryRuleNegation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleNegation = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1614:2: (iv_ruleNegation= ruleNegation EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1615:2: iv_ruleNegation= ruleNegation EOF
            {
             currentNode = createCompositeNode(grammarAccess.getNegationRule(), currentNode); 
            pushFollow(FOLLOW_ruleNegation_in_entryRuleNegation2732);
            iv_ruleNegation=ruleNegation();
            _fsp--;

             current =iv_ruleNegation; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleNegation2742); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleNegation


    // $ANTLR start ruleNegation
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1622:1: ruleNegation returns [EObject current=null] : ( '-' this_PrimaryExpression_1= rulePrimaryExpression () ) ;
    public final EObject ruleNegation() throws RecognitionException {
        EObject current = null;

        EObject this_PrimaryExpression_1 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1627:6: ( ( '-' this_PrimaryExpression_1= rulePrimaryExpression () ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1628:1: ( '-' this_PrimaryExpression_1= rulePrimaryExpression () )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1628:1: ( '-' this_PrimaryExpression_1= rulePrimaryExpression () )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1628:3: '-' this_PrimaryExpression_1= rulePrimaryExpression ()
            {
            match(input,32,FOLLOW_32_in_ruleNegation2777); 

                    createLeafNode(grammarAccess.getNegationAccess().getHyphenMinusKeyword_0(), null); 
                
             
                    currentNode=createCompositeNode(grammarAccess.getNegationAccess().getPrimaryExpressionParserRuleCall_1(), currentNode); 
                
            pushFollow(FOLLOW_rulePrimaryExpression_in_ruleNegation2799);
            this_PrimaryExpression_1=rulePrimaryExpression();
            _fsp--;

             
                    current = this_PrimaryExpression_1; 
                    currentNode = currentNode.getParent();
                
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1641:1: ()
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1642:5: 
            {
             
                    temp=factory.create(grammarAccess.getNegationAccess().getNegationOperandAction_2().getType().getClassifier());
                    try {
                    	factory.set(temp, "operand", current, null /*ParserRule*/, currentNode);
                    } catch(ValueConverterException vce) {
                    	handleValueConverterException(vce);
                    }
                    current = temp; 
                    temp = null;
                    CompositeNode newNode = createCompositeNode(grammarAccess.getNegationAccess().getNegationOperandAction_2(), currentNode.getParent());
                newNode.getChildren().add(currentNode);
                moveLookaheadInfo(currentNode, newNode);
                currentNode = newNode; 
                    associateNodeWithAstElement(currentNode, current); 
                

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleNegation


    // $ANTLR start entryRuleTopLevelExpression
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1665:1: entryRuleTopLevelExpression returns [EObject current=null] : iv_ruleTopLevelExpression= ruleTopLevelExpression EOF ;
    public final EObject entryRuleTopLevelExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTopLevelExpression = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1666:2: (iv_ruleTopLevelExpression= ruleTopLevelExpression EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1667:2: iv_ruleTopLevelExpression= ruleTopLevelExpression EOF
            {
             currentNode = createCompositeNode(grammarAccess.getTopLevelExpressionRule(), currentNode); 
            pushFollow(FOLLOW_ruleTopLevelExpression_in_entryRuleTopLevelExpression2843);
            iv_ruleTopLevelExpression=ruleTopLevelExpression();
            _fsp--;

             current =iv_ruleTopLevelExpression; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleTopLevelExpression2853); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleTopLevelExpression


    // $ANTLR start ruleTopLevelExpression
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1674:1: ruleTopLevelExpression returns [EObject current=null] : this_Addition_0= ruleAddition ;
    public final EObject ruleTopLevelExpression() throws RecognitionException {
        EObject current = null;

        EObject this_Addition_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1679:6: (this_Addition_0= ruleAddition )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1681:5: this_Addition_0= ruleAddition
            {
             
                    currentNode=createCompositeNode(grammarAccess.getTopLevelExpressionAccess().getAdditionParserRuleCall(), currentNode); 
                
            pushFollow(FOLLOW_ruleAddition_in_ruleTopLevelExpression2899);
            this_Addition_0=ruleAddition();
            _fsp--;

             
                    current = this_Addition_0; 
                    currentNode = currentNode.getParent();
                

            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleTopLevelExpression


    // $ANTLR start entryRulePrimaryExpression
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1697:1: entryRulePrimaryExpression returns [EObject current=null] : iv_rulePrimaryExpression= rulePrimaryExpression EOF ;
    public final EObject entryRulePrimaryExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePrimaryExpression = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1698:2: (iv_rulePrimaryExpression= rulePrimaryExpression EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1699:2: iv_rulePrimaryExpression= rulePrimaryExpression EOF
            {
             currentNode = createCompositeNode(grammarAccess.getPrimaryExpressionRule(), currentNode); 
            pushFollow(FOLLOW_rulePrimaryExpression_in_entryRulePrimaryExpression2933);
            iv_rulePrimaryExpression=rulePrimaryExpression();
            _fsp--;

             current =iv_rulePrimaryExpression; 
            match(input,EOF,FOLLOW_EOF_in_entryRulePrimaryExpression2943); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRulePrimaryExpression


    // $ANTLR start rulePrimaryExpression
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1706:1: rulePrimaryExpression returns [EObject current=null] : (this_Negation_0= ruleNegation | this_Constant_1= ruleConstant | this_Reference_2= ruleReference | ( '(' this_Addition_4= ruleAddition ')' ) ) ;
    public final EObject rulePrimaryExpression() throws RecognitionException {
        EObject current = null;

        EObject this_Negation_0 = null;

        EObject this_Constant_1 = null;

        EObject this_Reference_2 = null;

        EObject this_Addition_4 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1711:6: ( (this_Negation_0= ruleNegation | this_Constant_1= ruleConstant | this_Reference_2= ruleReference | ( '(' this_Addition_4= ruleAddition ')' ) ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1712:1: (this_Negation_0= ruleNegation | this_Constant_1= ruleConstant | this_Reference_2= ruleReference | ( '(' this_Addition_4= ruleAddition ')' ) )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1712:1: (this_Negation_0= ruleNegation | this_Constant_1= ruleConstant | this_Reference_2= ruleReference | ( '(' this_Addition_4= ruleAddition ')' ) )
            int alt25=4;
            switch ( input.LA(1) ) {
            case 32:
                {
                alt25=1;
                }
                break;
            case RULE_BIG_INT:
                {
                alt25=2;
                }
                break;
            case RULE_ID:
                {
                alt25=3;
                }
                break;
            case 14:
                {
                alt25=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("1712:1: (this_Negation_0= ruleNegation | this_Constant_1= ruleConstant | this_Reference_2= ruleReference | ( '(' this_Addition_4= ruleAddition ')' ) )", 25, 0, input);

                throw nvae;
            }

            switch (alt25) {
                case 1 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1713:5: this_Negation_0= ruleNegation
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getPrimaryExpressionAccess().getNegationParserRuleCall_0(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleNegation_in_rulePrimaryExpression2990);
                    this_Negation_0=ruleNegation();
                    _fsp--;

                     
                            current = this_Negation_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1723:5: this_Constant_1= ruleConstant
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getPrimaryExpressionAccess().getConstantParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleConstant_in_rulePrimaryExpression3017);
                    this_Constant_1=ruleConstant();
                    _fsp--;

                     
                            current = this_Constant_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 3 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1733:5: this_Reference_2= ruleReference
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getPrimaryExpressionAccess().getReferenceParserRuleCall_2(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleReference_in_rulePrimaryExpression3044);
                    this_Reference_2=ruleReference();
                    _fsp--;

                     
                            current = this_Reference_2; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 4 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1742:6: ( '(' this_Addition_4= ruleAddition ')' )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1742:6: ( '(' this_Addition_4= ruleAddition ')' )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1742:8: '(' this_Addition_4= ruleAddition ')'
                    {
                    match(input,14,FOLLOW_14_in_rulePrimaryExpression3060); 

                            createLeafNode(grammarAccess.getPrimaryExpressionAccess().getLeftParenthesisKeyword_3_0(), null); 
                        
                     
                            currentNode=createCompositeNode(grammarAccess.getPrimaryExpressionAccess().getAdditionParserRuleCall_3_1(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleAddition_in_rulePrimaryExpression3082);
                    this_Addition_4=ruleAddition();
                    _fsp--;

                     
                            current = this_Addition_4; 
                            currentNode = currentNode.getParent();
                        
                    match(input,16,FOLLOW_16_in_rulePrimaryExpression3091); 

                            createLeafNode(grammarAccess.getPrimaryExpressionAccess().getRightParenthesisKeyword_3_2(), null); 
                        

                    }


                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end rulePrimaryExpression


    // $ANTLR start entryRuleReference
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1767:1: entryRuleReference returns [EObject current=null] : iv_ruleReference= ruleReference EOF ;
    public final EObject entryRuleReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleReference = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1768:2: (iv_ruleReference= ruleReference EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1769:2: iv_ruleReference= ruleReference EOF
            {
             currentNode = createCompositeNode(grammarAccess.getReferenceRule(), currentNode); 
            pushFollow(FOLLOW_ruleReference_in_entryRuleReference3128);
            iv_ruleReference=ruleReference();
            _fsp--;

             current =iv_ruleReference; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleReference3138); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleReference


    // $ANTLR start ruleReference
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1776:1: ruleReference returns [EObject current=null] : ( ( RULE_ID ) ) ;
    public final EObject ruleReference() throws RecognitionException {
        EObject current = null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1781:6: ( ( ( RULE_ID ) ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1782:1: ( ( RULE_ID ) )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1782:1: ( ( RULE_ID ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1783:1: ( RULE_ID )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1783:1: ( RULE_ID )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1784:3: RULE_ID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getReferenceRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleReference3180); 

            		createLeafNode(grammarAccess.getReferenceAccess().getVariableVariableCrossReference_0(), "variable"); 
            	

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleReference


    // $ANTLR start entryRuleConstant
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1804:1: entryRuleConstant returns [EObject current=null] : iv_ruleConstant= ruleConstant EOF ;
    public final EObject entryRuleConstant() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleConstant = null;


        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1805:2: (iv_ruleConstant= ruleConstant EOF )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1806:2: iv_ruleConstant= ruleConstant EOF
            {
             currentNode = createCompositeNode(grammarAccess.getConstantRule(), currentNode); 
            pushFollow(FOLLOW_ruleConstant_in_entryRuleConstant3215);
            iv_ruleConstant=ruleConstant();
            _fsp--;

             current =iv_ruleConstant; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleConstant3225); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleConstant


    // $ANTLR start ruleConstant
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1813:1: ruleConstant returns [EObject current=null] : ( (lv_value_0_0= RULE_BIG_INT ) ) ;
    public final EObject ruleConstant() throws RecognitionException {
        EObject current = null;

        Token lv_value_0_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1818:6: ( ( (lv_value_0_0= RULE_BIG_INT ) ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1819:1: ( (lv_value_0_0= RULE_BIG_INT ) )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1819:1: ( (lv_value_0_0= RULE_BIG_INT ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1820:1: (lv_value_0_0= RULE_BIG_INT )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1820:1: (lv_value_0_0= RULE_BIG_INT )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1821:3: lv_value_0_0= RULE_BIG_INT
            {
            lv_value_0_0=(Token)input.LT(1);
            match(input,RULE_BIG_INT,FOLLOW_RULE_BIG_INT_in_ruleConstant3266); 

            			createLeafNode(grammarAccess.getConstantAccess().getValueBIG_INTTerminalRuleCall_0(), "value"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getConstantRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"value",
            	        		lv_value_0_0, 
            	        		"BIG_INT", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleConstant


    // $ANTLR start ruleEquationType
    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1851:1: ruleEquationType returns [Enumerator current=null] : ( ( '=' ) | ( '!=' ) | ( '<' ) | ( '>' ) ) ;
    public final Enumerator ruleEquationType() throws RecognitionException {
        Enumerator current = null;

         setCurrentLookahead(); resetLookahead(); 
        try {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1855:6: ( ( ( '=' ) | ( '!=' ) | ( '<' ) | ( '>' ) ) )
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1856:1: ( ( '=' ) | ( '!=' ) | ( '<' ) | ( '>' ) )
            {
            // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1856:1: ( ( '=' ) | ( '!=' ) | ( '<' ) | ( '>' ) )
            int alt26=4;
            switch ( input.LA(1) ) {
            case 33:
                {
                alt26=1;
                }
                break;
            case 34:
                {
                alt26=2;
                }
                break;
            case 35:
                {
                alt26=3;
                }
                break;
            case 36:
                {
                alt26=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("1856:1: ( ( '=' ) | ( '!=' ) | ( '<' ) | ( '>' ) )", 26, 0, input);

                throw nvae;
            }

            switch (alt26) {
                case 1 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1856:2: ( '=' )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1856:2: ( '=' )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1856:4: '='
                    {
                    match(input,33,FOLLOW_33_in_ruleEquationType3318); 

                            current = grammarAccess.getEquationTypeAccess().getEQUALEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getEquationTypeAccess().getEQUALEnumLiteralDeclaration_0(), null); 
                        

                    }


                    }
                    break;
                case 2 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1862:6: ( '!=' )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1862:6: ( '!=' )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1862:8: '!='
                    {
                    match(input,34,FOLLOW_34_in_ruleEquationType3333); 

                            current = grammarAccess.getEquationTypeAccess().getNOT_EQUALEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getEquationTypeAccess().getNOT_EQUALEnumLiteralDeclaration_1(), null); 
                        

                    }


                    }
                    break;
                case 3 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1868:6: ( '<' )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1868:6: ( '<' )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1868:8: '<'
                    {
                    match(input,35,FOLLOW_35_in_ruleEquationType3348); 

                            current = grammarAccess.getEquationTypeAccess().getLESSEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getEquationTypeAccess().getLESSEnumLiteralDeclaration_2(), null); 
                        

                    }


                    }
                    break;
                case 4 :
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1874:6: ( '>' )
                    {
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1874:6: ( '>' )
                    // ../org.eclipse.iota.xtext/src-gen/org/eclipse/iota/xtext/parser/antlr/internal/InternalIota.g:1874:8: '>'
                    {
                    match(input,36,FOLLOW_36_in_ruleEquationType3363); 

                            current = grammarAccess.getEquationTypeAccess().getGREATEREnumLiteralDeclaration_3().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getEquationTypeAccess().getGREATEREnumLiteralDeclaration_3(), null); 
                        

                    }


                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleEquationType


 

    public static final BitSet FOLLOW_ruleModule_in_entryRuleModule75 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleModule85 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDefinition_in_ruleModule130 = new BitSet(new long[]{0x0000000000022002L});
    public static final BitSet FOLLOW_ruleDefinition_in_entryRuleDefinition166 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDefinition176 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_13_in_ruleDefinition213 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleDefinition239 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleDefinition254 = new BitSet(new long[]{0x0000000000010010L});
    public static final BitSet FOLLOW_ruleParameter_in_ruleDefinition276 = new BitSet(new long[]{0x0000000000018000L});
    public static final BitSet FOLLOW_15_in_ruleDefinition287 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleParameter_in_ruleDefinition308 = new BitSet(new long[]{0x0000000000018000L});
    public static final BitSet FOLLOW_16_in_ruleDefinition322 = new BitSet(new long[]{0x00000001048040D0L});
    public static final BitSet FOLLOW_ruleAlternation_in_ruleDefinition343 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_17_in_ruleDefinition361 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleDefinition387 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleDefinition402 = new BitSet(new long[]{0x0000000000010010L});
    public static final BitSet FOLLOW_ruleParameter_in_ruleDefinition424 = new BitSet(new long[]{0x0000000000018000L});
    public static final BitSet FOLLOW_15_in_ruleDefinition435 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleParameter_in_ruleDefinition456 = new BitSet(new long[]{0x0000000000018000L});
    public static final BitSet FOLLOW_16_in_ruleDefinition470 = new BitSet(new long[]{0x00000001048040D0L});
    public static final BitSet FOLLOW_ruleAlternation_in_ruleDefinition491 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleDefinition501 = new BitSet(new long[]{0x00000001048040D0L});
    public static final BitSet FOLLOW_ruleAlternation_in_ruleDefinition522 = new BitSet(new long[]{0x0000000000280000L});
    public static final BitSet FOLLOW_ruleProof_in_ruleDefinition543 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_19_in_ruleDefinition556 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAlternation_in_entryRuleAlternation592 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAlternation602 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleClause_in_ruleAlternation648 = new BitSet(new long[]{0x0000000000100002L});
    public static final BitSet FOLLOW_20_in_ruleAlternation659 = new BitSet(new long[]{0x00000001048040D0L});
    public static final BitSet FOLLOW_ruleClause_in_ruleAlternation680 = new BitSet(new long[]{0x0000000000100002L});
    public static final BitSet FOLLOW_ruleParameter_in_entryRuleParameter718 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleParameter728 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleParameter769 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleProof_in_entryRuleProof809 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleProof819 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_21_in_ruleProof854 = new BitSet(new long[]{0x0000000000000012L});
    public static final BitSet FOLLOW_ruleStep_in_ruleProof884 = new BitSet(new long[]{0x0000000000000012L});
    public static final BitSet FOLLOW_ruleStep_in_entryRuleStep921 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleStep931 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRule_in_ruleStep977 = new BitSet(new long[]{0x0000000000000022L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleStep995 = new BitSet(new long[]{0x0000000000400002L});
    public static final BitSet FOLLOW_22_in_ruleStep1011 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_RULE_BIG_INT_in_ruleStep1028 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRule_in_entryRuleRule1074 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRule1085 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleRule1124 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleClause_in_entryRuleClause1168 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleClause1178 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_23_in_ruleClause1214 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleExistential_in_ruleClause1235 = new BitSet(new long[]{0x0000000001008000L});
    public static final BitSet FOLLOW_15_in_ruleClause1246 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleExistential_in_ruleClause1267 = new BitSet(new long[]{0x0000000001008000L});
    public static final BitSet FOLLOW_24_in_ruleClause1279 = new BitSet(new long[]{0x00000001040040D0L});
    public static final BitSet FOLLOW_ruleConstraint_in_ruleClause1302 = new BitSet(new long[]{0x0000000002000002L});
    public static final BitSet FOLLOW_25_in_ruleClause1313 = new BitSet(new long[]{0x00000001040040D0L});
    public static final BitSet FOLLOW_ruleConstraint_in_ruleClause1334 = new BitSet(new long[]{0x0000000002000002L});
    public static final BitSet FOLLOW_ruleExistential_in_entryRuleExistential1372 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleExistential1382 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleExistential1423 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleConstraint_in_entryRuleConstraint1463 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleConstraint1473 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_26_in_ruleConstraint1509 = new BitSet(new long[]{0x00000001000040D0L});
    public static final BitSet FOLLOW_ruleBasicConstraint_in_ruleConstraint1531 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_27_in_ruleConstraint1548 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBasicConstraint_in_ruleConstraint1590 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBasicConstraint_in_entryRuleBasicConstraint1625 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleBasicConstraint1635 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBoolean_in_ruleBasicConstraint1682 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInclusion_in_ruleBasicConstraint1709 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleEquation_in_ruleBasicConstraint1736 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBoolean_in_entryRuleBoolean1771 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleBoolean1781 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_BOOL_in_ruleBoolean1822 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInclusion_in_entryRuleInclusion1862 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleInclusion1872 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleInclusion1915 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleInclusion1925 = new BitSet(new long[]{0x0000000000010010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleInclusion1944 = new BitSet(new long[]{0x0000000000018000L});
    public static final BitSet FOLLOW_15_in_ruleInclusion1955 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleInclusion1973 = new BitSet(new long[]{0x0000000000018000L});
    public static final BitSet FOLLOW_16_in_ruleInclusion1987 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleEquation_in_entryRuleEquation2023 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleEquation2033 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTopLevelExpression_in_ruleEquation2079 = new BitSet(new long[]{0x0000001E00000000L});
    public static final BitSet FOLLOW_ruleEquationType_in_ruleEquation2100 = new BitSet(new long[]{0x0000000100004050L});
    public static final BitSet FOLLOW_ruleTopLevelExpression_in_ruleEquation2121 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAddition_in_entryRuleAddition2157 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAddition2167 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMultiplication_in_ruleAddition2214 = new BitSet(new long[]{0x0000000110000002L});
    public static final BitSet FOLLOW_28_in_ruleAddition2235 = new BitSet(new long[]{0x0000000100004050L});
    public static final BitSet FOLLOW_ruleMultiplication_in_ruleAddition2256 = new BitSet(new long[]{0x0000000110000002L});
    public static final BitSet FOLLOW_ruleNegation_in_ruleAddition2284 = new BitSet(new long[]{0x0000000110000002L});
    public static final BitSet FOLLOW_ruleMultiplication_in_entryRuleMultiplication2324 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMultiplication2334 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDivision_in_ruleMultiplication2381 = new BitSet(new long[]{0x0000000020000002L});
    public static final BitSet FOLLOW_29_in_ruleMultiplication2401 = new BitSet(new long[]{0x0000000100004050L});
    public static final BitSet FOLLOW_ruleDivision_in_ruleMultiplication2422 = new BitSet(new long[]{0x0000000020000002L});
    public static final BitSet FOLLOW_ruleDivision_in_entryRuleDivision2462 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDivision2472 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExponentiation_in_ruleDivision2519 = new BitSet(new long[]{0x0000000040000002L});
    public static final BitSet FOLLOW_30_in_ruleDivision2538 = new BitSet(new long[]{0x0000000100004050L});
    public static final BitSet FOLLOW_ruleExponentiation_in_ruleDivision2559 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExponentiation_in_entryRuleExponentiation2597 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleExponentiation2607 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePrimaryExpression_in_ruleExponentiation2654 = new BitSet(new long[]{0x0000000080000002L});
    public static final BitSet FOLLOW_31_in_ruleExponentiation2673 = new BitSet(new long[]{0x0000000100004050L});
    public static final BitSet FOLLOW_rulePrimaryExpression_in_ruleExponentiation2694 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNegation_in_entryRuleNegation2732 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleNegation2742 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_32_in_ruleNegation2777 = new BitSet(new long[]{0x0000000100004050L});
    public static final BitSet FOLLOW_rulePrimaryExpression_in_ruleNegation2799 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTopLevelExpression_in_entryRuleTopLevelExpression2843 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTopLevelExpression2853 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAddition_in_ruleTopLevelExpression2899 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePrimaryExpression_in_entryRulePrimaryExpression2933 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePrimaryExpression2943 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNegation_in_rulePrimaryExpression2990 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleConstant_in_rulePrimaryExpression3017 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleReference_in_rulePrimaryExpression3044 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_14_in_rulePrimaryExpression3060 = new BitSet(new long[]{0x0000000100004050L});
    public static final BitSet FOLLOW_ruleAddition_in_rulePrimaryExpression3082 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_rulePrimaryExpression3091 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleReference_in_entryRuleReference3128 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleReference3138 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleReference3180 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleConstant_in_entryRuleConstant3215 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleConstant3225 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_BIG_INT_in_ruleConstant3266 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_33_in_ruleEquationType3318 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_34_in_ruleEquationType3333 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_35_in_ruleEquationType3348 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_36_in_ruleEquationType3363 = new BitSet(new long[]{0x0000000000000002L});

}